2016-08-12 5 views
3

의 번호는 Yii2user_comment_user이라는 표에 viaTable이라는 표를 사용하여 찾으려고합니다. 그러나 내 variables/query을 제대로 삽입하지 못했습니다.Yii2 viaTable 다중 변수

현재 두 개의 queries이 설정되어있어 (자체적으로) 올바른 결과를 얻을 수 있는지 확인합니다.

은 어떻게 든해야 두 queries merged 하나에 :

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