I ont des tables libres: mode, livre, user_book, offre table utilisateurrelations avec Yii2 table de jonction
a méthode:
public function getBooks()
{
return $this->hasMany(UserBook::className(), ['user_id' => 'id']);
}
table user_book a deux champs: user_id, book_id; et les méthodes
public function getUser()
{
return $this->hasOne(User::className(), ['id' => 'user_id']);
}
public function getBook()
{
return $this->hasOne(Book::className(), ['id' => 'book_id']);
}
offre de table
ont méthode comme: getUser(), getBook(),
et maintenant je voudrais exposition livres utilisateur ne pas. J'essaie de faire quelque chose comme
$query = Offer::find()
->with('user')
->andWhere([
'offer.status' => Offer::STATUS_ACTIVE,
]);
$query->andWhere(['not in', 'offer.book_id', 'user.books.book_id']);
mais cela ne fonctionne pas. Avez-vous des idées comment puis-je le faire?
ok, j'ai 'getBooks public function() { retour $ this-> hasMany (Livre :: className(), [ 'id' => 'book_id']) -> viaTable ('{{% UserBooks}}', ['user_id' => 'id']); } 'mais comment créer une requête? –
Vous pouvez simplement utiliser 'via ('userBooks')' - vous avez défini cette relation comme je peux le voir. Dans la requête, utilisez '-> joinWith (['books'])', puis dans la requête, utilisez-le comme 'books.id', pas' user.books.id' – Yupik