2016-05-24 24 views
1

Ich möchte alle Gruppen, die nicht von einem Benutzer durch eine andere Tabelle verbunden sind. Meine Tabellen sind user, user_to_usergroup und usergroup.Yii2 Junction Relation

Gibt es eine Möglichkeit, die entgegengesetzten Ergebnisse von einer Abfrage zu erhalten?

Der Code ist wie folgt:

public function getGroupsNotJoint() {  
return $this- >hasMany(Usergroup::className(), 
['id' => 'group_id'])->viaTable('user_to_usergroup', ['user_id' => 'id']); 
} 

Dieser Code gibt alle Gruppen, die ein Benutzer gehören, ich will nur die Gruppen, die der Benutzer nicht gehört.

Antwort

1

Namen bestehende Beziehung getGroups(), können Sie den Rest der Gruppen für den aktuellen Benutzer durch Änderung dieser Beziehung (Anwendung zusätzliche Bedingung) erhalten können:

public function getOtherGroups() 
{ 
    return $this->getGroups()->andWhere(['!=', 'user_id', \Yii::$app->user->id]); 
} 
+0

Das Problem ist, dass, wenn in der Tabelle user_to_usergroup I Gelenk haben eine Gruppe, aber existiert eine andere Zeile mit derselben group_id aber anderer user_id, wird diese Zeile als "OtherGroup" zurückgegeben, und diese Gruppe als nicht joint. Ich möchte alle Gruppen nehmen, die ich nicht verbunden habe, nicht alle Zeilen, die ich nicht habe meine ID ... –