2016-08-12 2 views
3

の番号は、Yii2user_comment_userという表のviaTableを使用して検索しようとしています。しかし、私はvariables/queryが正しく挿入されていないようです。Yii2 viaTable複数の変数

現在のところ、自分で正しい結果が得られるかどうかを確認するために、2つのqueriesが設定されています。

これらは何とか一つにmergedする必要が2 queriesです:

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

あなたは、もう少し何か説明できます期待される結果は? –

+0

@ KostasMitsarakis sender_idが$ this-> idで、receiver_idが$ idで、その逆の場合、すべてのUserCommentを取得する必要があります。日付けで並び替え。 –

答えて

1

答えは実際に私が想像していたよりもはるかに簡単だった:

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; 
    }