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