Yii2与联结表的关系

时间:2017-02-16 14:35:31

标签: yii2 relationship junction

我有免费的表格:user,book,user_book,offers

用户表有方法:

public function getBooks()
    {
        return $this->hasMany(UserBook::className(), ['user_id' => 'id']);
    }

user_book表有两个字段:user_id,book_id;和方法

public function getUser()
   {
        return $this->hasOne(User::className(), ['id' => 'user_id']);
   }

public function getBook()
   {
        return $this->hasOne(Book::className(), ['id' => 'book_id']);
   }

表提供的方法如:getUser(),getBook(),

现在我想要显示用户没有的图书。我尝试做类似

的事情
     $query = Offer::find()
                ->with('user')
                ->andWhere([
                    'offer.status' => Offer::STATUS_ACTIVE,
                ]);

$query->andWhere(['not in', 'offer.book_id', 'user.books.book_id']);

但它不起作用。你有什么想法我能做到吗?

1 个答案:

答案 0 :(得分:0)

Yii2 docs, relation via junction table

  

在数据库建模中,当两者之间的多重性相关时   表是多对多的,通常引入联结表。对于   例如,订单表和商品表可以通过a相关   联结表名为order_item。一个订单将对应于   多个订单商品,而一个商品也将对应   多个订单项。

     

当声明这种关系时,你可以通过()或者调用   viaTable()指定联结表。 via()之间的区别   和viaTable()是前者指定的联结表   现有关系名称的术语,而后者直接使用   连接表。例如,

var hash = window.location.hash;
if (hash) {
    $('.nav-tabs a[href="' + hash + '"]').trigger('show.bs.tab');
}