У меня есть свободные столы: пользователь, книга, user_book предлагаетYii2 отношения с соединительной таблицей
пользовательской таблица имеет метод:
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']);
но это не работает. У вас есть идеи, как я могу это сделать?
нормально, у меня есть 'общественная функция getBooks() { возвращение $ this-> hasMany (Book :: имя класса(), [ 'ID' => 'book_id']) -> viaTable ('{{% UserBooks}}', ['user_id' => 'id']); } 'но как построить запрос? –
Вы можете просто использовать 'via ('userBooks')' - u определили это отношение, как я вижу. В запросе используйте '-> joinWith (['books'])', а затем в запросе используйте его как 'books.id', а не' user.books.id' – Yupik