2016-05-18 2 views
0

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

[ 
    { 
     "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": [ 

     ] 
    }] 

У меня нет данных для второго идентификатора, в то время как данные для него имеются. Пожалуйста, предложите мне. Спасибо заранее.

+0

Упс, я не заметил, что мой недавно получили CakePHP тег возможности быть в состоянии закрыть вопросы одним голосом. Я не был на 100% уверен, но я думаю, что это, по сути, то, что вы пытаетесь сделать - извините, если это не так! Если ваша проблема другая, проконсультируйтесь с ней, и я проголосую, чтобы возобновить ее в случае необходимости. – ndm

+0

Вы можете использовать func() -> min(), который работал над cakephp3.1, но не cakephp3.2 + http://book.cakephp.org/3.0/en/orm/query-builder.html – Fury

ответ

0

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

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

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

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

$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); 
} 
Смежные вопросы