2016-08-12 6 views
3

Я пытаюсь найти номер UserComment, используя viaTable на столе под названием user_comment_user в Yii2. Однако, похоже, я не могу правильно установить 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 Мне нужно получить все 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; 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^