我有免费的表格: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']);
但它不起作用。你有什么想法我能做到吗?
答案 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');
}