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

时间:2018-04-29 11:03:27

标签: yii2

我有一个表 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 。有没有办法,我可以做到这一点,而不先获得关系,然后迭代它们?

2 个答案:

答案 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;
}