2016-07-20 4 views
1

У меня есть две модели с именем Post и Comment, которые связаны Post hasMany Comment и Comment принадлежит To Post. Я хочу получить все сообщения с пятью пятью каждым. Я бы использовал этот код:Cakephp 3 - limit() и содержащаяся модель

$this->Posts->find('all') 
    ->contain([ 
     'Comments' => function($q) { 
      return $q 
       ->order('created ASC') 
       ->limit(5); 
} 
]); 

Это неправильно работает с пределом(). Пожалуйста, помогите решить эту проблему. Я использовал этот пример: How to limit contained associations per record/group? я пытался это нравится (в модели Post):

$this->hasOne('TopComments', [ 
    'className' => 'Comments', 
    'strategy' => 'select', 
    'conditions' => function (\Cake\Database\Expression\QueryExpression $exp, \Cake\ORM\Query $query) { 
     $query->leftJoin(
      ['CommentsFilter' => 'comments'], 
      [ 
       'TopComments.post_id = CommentsFilter.post_id', 
       'TopComments.created < CommentsFilter.created' 
      ]); 
     return $exp->add(['CommentsFilter.id IS NULL']); 
    } 
]); 

В контроллере сообщение:

$this->Posts->find('all') 
    ->contain([ 
     'TopComments' => function($q) { 
      return $q 
       ->order('TopComments.created ASC') 
       ->limit(5); 
} 
]); 

К сожалению, это не работает. Я не знаю, где я ошибаюсь.

+0

Возможные дубликат [Как ограничить содержащиеся ассоциации за записи/группы?] (HTTP://stackoverflow.com/questions/30241975/how-to-limit-contained-associations-per-record-group) – arilia

ответ

1

Вы должны попробовать это

В модели

$this->hasMany('Comments', [ 
    'foreignKey' => 'post_id' 
]); 

В контроллере

$this->Posts->find() 
    ->contain([ 
     'Comments' => function($q) { 
      return $q 
       ->order(['created' =>'ASC']) 
       ->limit(5); 
} 
]); 
+0

К сожалению, это не сработает. CakePHP - мощная инфраструктура, но иногда бывает так, что основные вещи не работают должным образом. – lupi

+0

спасибо, ты же мое время –