2016-08-12 3 views
3

Ich versuche, eine UserComment mit einem viaTable auf der Tabelle user_comment_user in Yii2 zu finden. Allerdings kann ich meine variables/query nicht richtig eingefügt bekommen.Yii2 viaTable mehrere Variablen

Zur Zeit habe ich zwei queries eingerichtet, um zu überprüfen, ob (für sich) sie das richtige Ergebnis erzielen, was sie tun.

Dies sind die zwei queries, die irgendwie merged in einem sein:

public function findConversation($id) 
{ 
    $query = $this->hasMany(UserComment::classname(), ['id'=>'user_comment_id']) 
     ->viaTable('user_comment_user', ['sender_id'=>'id'], function ($query) use ($id) { 
      $query->andWhere(['receiver_id'=>$id]); 
     }); 
    $query2 = $this->hasMany(UserComment::classname(), ['id'=>'user_comment_id']) 
     ->viaTable('user_comment_user', ['receiver_id'=>'id'], function ($query) use ($id) { 
      $query->andWhere(['sender_id'=>$id]); 
     }); 
     return $query; 
} 
+0

Können Sie ein bisschen mehr erklären, was die erwartete Ergebnisse sind? –

+0

@KostasMitsarakis Ich muss alle UserComment, wo die Absender-ID ist $ this-> ID und Empfänger-ID ist $ ID, und umgekehrt. Nach Datum sortieren. –

Antwort

1

Die Antwort war eigentlich viel einfacher als ich gedacht hatte:

public function findConversation($id) 
    { 
     $query = UserComment::find(); 
     $query->leftJoin('user_comment_user',  'user_comment_user.user_comment_id=user_comment.id'); 
     $query->where(['receiver_id'=>$this->id, 'sender_id'=>$id]); 
     $query->orWhere(['receiver_id'=>$id, 'sender_id'=>$this->id]); 
     $query->orderBy(['created_at'=>SORT_DESC]); 

     return $query; 
    }