Yii2-使用具有关系的连接表

Yii2-使用具有关系的连接表,yii2,Yii2,我有一本书和一本封面。书籍和封面之间的关系是一对多,这意味着每本书可以有多个封面。因此,我有第三个表连接这两个表,图书封面关系 将这些转换为模型意味着我有3个模型 书籍 封面 封面关系 现在在图书模型中,我对相关的图书封面关系有以下关系 public function getBookCoverRels() { return $this->hasMany(BookCoverRelation::className(), ['book' => 'id']); }

我有一本书和一本封面。
书籍
封面
之间的关系是
一对多
,这意味着每本书可以有多个封面。因此,我有第三个表连接这两个表,
图书封面关系

将这些转换为模型意味着我有3个模型

  • 书籍
  • 封面
  • 封面关系
现在在
图书
模型中,我对相关的
图书封面关系
有以下关系

public function getBookCoverRels() {
        return $this->hasMany(BookCoverRelation::className(), ['book' => 'id']);
    }

不过,我想要的是能够获得所有的
封面。有没有一种方法可以让我做到这一点,而不用先得到关系,然后再遍历它们

您可以使用方法让所有封面模型“通过”您的封面关系连接表,如Yii 2.0的最终指南所述:

您可以使用方法让所有封面模型“通过”您的封面关系连接表,正如《Yii 2.0最终指南》中所述:

您应该与
书籍中的
viaTable
建立关系

 public function getCovers(){
        return $this->hasMany( Covers::class,['id'=>'cover_id'])->viaTable('{{%book_cover_relation}}',['book_id'=>'id']);  
    }
像这样使用它

$qu = Books::findOne (['id'=>1]);

foreach($qu->covers as $cover){
    echo $cover->name;
}

您应该在
Books
Model中创建与
viaTable
的关系

 public function getCovers(){
        return $this->hasMany( Covers::class,['id'=>'cover_id'])->viaTable('{{%book_cover_relation}}',['book_id'=>'id']);  
    }
像这样使用它

$qu = Books::findOne (['id'=>1]);

foreach($qu->covers as $cover){
    echo $cover->name;
}