Предел QueryBuilder работает только для первой строки в cakephp 3.2

Hii я новичок в cakephp 3.2 v. Здесь я использовал ассоциацию моделей (hasMany). Здесь, в разделе bind (campaign_videos), я хочу получить только одну запись, поэтому для этого я поставил ниже код, чтобы управлять им. мои фактические данные в дБ.

[ { "id": 1, "user_id": 95, "campaign_videos": [ { "id": 1, "campaign_id": 1, }, { "id": 3, "campaign_id": 1, } ] }, { "id": 2, "user_id": 95, "campaign_videos": [ { "id": 2, "campaign_id": 2, } ] }, 
  $fetchCampaignFirst = $this->Campaigns->find()->contain(['CampaignVideos' => ['queryBuilder' => function ($q) { return $q->limit(1); }]]); 

Я получаю этот предел, работающий только для первых данных, а не для других (другие даже не отображают извлеченные данные).

Ниже я написал вывод

Здесь я хочу получить выход вроде

 [ { "id": 1, "user_id": 95, "campaign_videos": [ { "id": 1, "campaign_id": 1, }, ] }, { "id": 2, "user_id": 95, "campaign_videos": [ { "id": 2, "campaign_id": 2, } ] }] 

Только хотите первую запись campaign_videos. Здесь, после использования запроса queryBuilder, я выхожу так.

 [ { "id": 1, "user_id": 95, "campaign_videos": [ { "id": 1, "campaign_id": 1, }, ] }, { "id": 2, "user_id": 95, "campaign_videos": [ ] }] 

Я не получаю никаких данных для второго id, пока данные для него присутствуют. Пожалуйста, предложите мне. Заранее спасибо.

Возможно, я ошибаюсь (так что не стесняйтесь ответить на мой вопрос), но я думаю, что это невозможно, если использовать простой запрос

на самом деле торт при загрузке связанных данных делает один запрос в связанной таблице и после этого соответствует строкам с соответствующими в основной таблице.

Поэтому вам нужно будет сделать запрос mysql, который найдет первую запись для каждой категории. т.е. что-то вроде того, что описано в этой статье

Я думаю, что единственное (или, может быть, более простое) решение состоит в том, чтобы перебирать ваши записи:

 $campaigns= $this->Campaigns->find(); foreach($campaigns as $campaign) { $campaign->campaign_videos = $this->Campaigns->CampaignVideos-find() ->where(['campaign_id' => $campaign->id] ->order(['id' => 'asc']) ->limit(1); }