фильтрация содержимого в CakePHP 3

Я использую CakePHP 3.4+.

У меня есть следующие таблицы и их ассоциация.

PostVideos->belongsTo(Кампании) || В PostVideos есть столбец campaign_id.

Кампании->hasMany(Клиентские кампании) || В ClientCampaigns есть столбец campaign_id.

UserClients->hasMany(ClientCampaigns) || ClientCampaigns имеет столбец user_client_id

UserClients содержит столбец client_id.

Я хочу выбрать/подсчитать в PostVideos с условием client_id в UserClients

$count['videos']['uploaded'] = $this->Campaigns->PostVideos->find()
    ->where(['UserClients.client_id' => $this->Auth->user('id')])
    ->contain(['Campaigns.ClientCampaigns.UserClients'])
    ->count();

Но это выдает ошибку базы данных как

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'UserClients.client_id' in 'where clause' 

person Anuj TBE    schedule 06.11.2017    source источник


Ответы (1)


Вы должны использовать matching для этого

$userId=$this-Auth->user('id');
$this->Campaigns->PostVideos->find()
     ->matching('Campaings.ClientCampaings.UserClients',function(Query $query) use ($userId) {
         return $query->where(['UserClients.client_id' => $userId])
      }
    ->contain(['Campaigns.ClientCampaigns.UserClients'])
    ->count();

Если вам не нужно загружать UserClients, вы можете пропустить contain.

person Antoniossss    schedule 06.11.2017