2017-02-09 17 views
0

Я пытаюсь перечислить сообщения общественного статуса и друзей сообщенияКак союз при использовании сопоставления

получать друзей на сообщения

$friendsPosts= $this->Posts->find('all') 
     ->contain(['Users', 'Languages', 'PostStates']) 
     ->matching('Users.Dusers', function ($q) { 
      return $q->where(['Dusers.id' => $this->Auth->user('id')]); 
     }); 

получения общественного поста

$posts= $this->Posts->find('all') 
     ->where(['Posts.post_state_id' => 3]) 
     ->contain(['Users', 'Languages', 'PostStates']); 

$posts->union($friendsPosts); 
dd($posts->toArray()); 

сообщение об ошибке: Использованный ВЫБРАТЬ операторы имеют разное количество столбцов

ответ

0

Решено

$posts = $this->Posts->find() 
       ->where(['Posts.post_state_id' => 3]) 
       ->contain(['Users', 'PostStates', 'Languages', 'Tags', 'Translations' => ['Users', 'Languages', 'conditions' => ['post_state_id' => 3]]]); 

     $friendsPosts = $this->Posts->find('all') 
       ->where(['Posts.post_state_id' => 2]) 
       ->contain(['PostStates', 'Languages', 'Users', 'Tags', 'Translations' => ['Users', 'Languages', 'conditions' => ['post_state_id' => 3]]]) 
       ->innerJoinWith('Users.Dusers', function ($q) { 
      return $q->where(['Dusers.id' => $this->Auth->user('id'), 'UsersUsers.status' => 1])->select($this->Posts->Users); 
     }); 
$posts->union($friendsPosts);