我有一个表 Book
和一个表 Cover
。 Book
与 Cover
之间的关系为one-to-many
,这意味着每本书都可以有多个封面。因此,我有第三个表连接两个 book-cover-relation
。
将它们翻译成模型意味着我有3个模型,
Book
,Cover
,BookCoverRelation
现在在 Book
模型中,我对相关的 BookCoverRelations
public function getBookCoverRels() {
return $this->hasMany(BookCoverRelation::className(), ['book' => 'id']);
}
我想要的是能够获得所有 Covers
。有没有办法,我可以做到这一点,而不先获得关系,然后迭代它们?
答案 0 :(得分:1)
您可以使用viaTable()方法获取所有封面模型"通过"您的 BookCoverRelations 联结表,如 Yii 2.0权威指南中所述:https://www.yiiframework.com/doc/guide/2.0/en/db-active-record#junction-table
答案 1 :(得分:1)
您应该在viaTable
模型
Books
建立关系
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;
}