2017-01-19 2 views
0

Ich habe zwei Tabellen: users mit Primärschlüssel id und friends mit Fremdschlüssel user1 und user2 sowohl in Bezug auf Benutzer-id.hasMany mit ‚oder‘ Zustand

In Benutzer Modell Ich habe

public function getFriends() { 
    return $this->hasMany(Friends::className(), ['user1' => 'id'])->inverseOf('user'); 
} 

User::find()->with('friends')->all() nur die Freunde, wo benutzer1 Matches des Benutzers id gegeben.

Wie soll ich getFriends() ändern, um Freunde mit user1 oder user2 zu finden, die auf die ID des Benutzers abgestimmt sind?

Antwort

0

Erwägen Sie bidirektionale Beziehung

EDIT: Nach # 1-Lösung nicht funktioniert, trotz yii dev es dort beraten


Nach http://github.com/yiisoft/yii2/issues/851 diese

public function getFriends() { 
    return $this->hasMany(Friends::className(), ['user1' => 'id']) 
     ->viaTable('friends', array('user2' => 'id'), function ($q) { 
      $q->where('user1=user2'); 
    }); 
} 

arbeiten sollten

EDIT:

eine andere Lösung gefunden, wenn Sie es nicht sortiert haben noch aus, überprüfen Sie diesen Link yii relation for multiple column foreign keys

+0

Es die folgenden Abfragen generiert: SELECT * FROM Freunde WHERE (user1 = user2) und (user2 = 123) 'und' SELECT * FROM freunde WHERE 0 = 1' (123 ist die ID des Benutzers) – Alexey

+0

oh yeah, es schien mir etwas komisch, hast du schon eine Lösung gefunden? – Ripper