Ich habe freie Tabellen: Benutzer, Buch, user_book bietetYii2 Beziehungen mit Verknüpfungstabelle
Benutzertabelle Methode hat:
public function getBooks()
{
return $this->hasMany(UserBook::className(), ['user_id' => 'id']);
}
user_book Tabelle hat zwei Felder: user_id, book_id; und Methoden
public function getUser()
{
return $this->hasOne(User::className(), ['id' => 'user_id']);
}
public function getBook()
{
return $this->hasOne(Book::className(), ['id' => 'book_id']);
}
Tabelle Angebot haben Methode wie: getUser(), getBook(),
und jetzt möchte ich zeigen Bücher wie, welche Benutzer nicht haben. Ich versuche etwas wie
$query = Offer::find()
->with('user')
->andWhere([
'offer.status' => Offer::STATUS_ACTIVE,
]);
$query->andWhere(['not in', 'offer.book_id', 'user.books.book_id']);
, aber es funktioniert nicht. Hast du ein paar Ideen, wie kann ich es schaffen?
ok, ich habe 'public function getBooks() { return $ this-> hasMany (Buch :: classname(), [ 'id' => 'book_id']) -> viaTable ('{{% UserBooks}}', ['user_id' => 'id']); } 'aber wie Abfrage erstellen? –
Sie könnten einfach 'via ('userBooks') 'verwenden - Sie haben diese Beziehung so definiert, wie ich sehen kann. Verwenden Sie in Query '-> joinWith (['books'])' 'und verwenden Sie sie dann in der Abfrage als' books.id', nicht als 'user.books.id' – Yupik