2016-08-12 119 views
3

我試圖在的Yii2表上使用viaTable找到一個UserComment的數字。不過,我似乎無法正確插入我的variables/queryYii2 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我需要獲得所有的UserComment,其中sender_id是$ this-> id,而receiver_id是$ id,反之亦然。按日期排序。 –

回答

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