Получить сообщения с их последним комментарием в CakePHP - PullRequest
1 голос
/ 23 февраля 2011

Скажем, у меня есть модель Post и модель Comment, связанные следующим образом:

Post hasMany Comment 
Comment belongsTo Post

Как использовать find('all') для извлечения каждого Post с соответствующими последними Comment?

Я попытался определить отношение hasOne в Post как:

var $hasOne = array('LatestComment' => array('className' => 'Comment', 'order' => 'LatestComment.created DESC'));

Но когда я делаю Post->find('all'), он возвращается каждые Post несколько раз, один раз за каждый Comment, с LatestComment, установленным на разные Comments.

Ответы [ 2 ]

2 голосов
/ 23 февраля 2011

Вы можете добавить 'limit' => 1 к вашему массиву параметров, чтобы получить только один комментарий.

В качестве альтернативы, вместо определения другого отношения, вы можете просто ограничить количество комментариев, возвращаемых при выполнении поиска, используя поведение Containable.

$this->Post->find('all',array(
                     'contain' => array(
                          'Comment' => array(
                              'order' => 'Comment.created DESC',
                              'limit' => 1
                          )
                      )
                  );

Это полезно, если вы хотите отфильтровать любые связанные наборы без определения отношений - например, по автору или в диапазоне дат.

Убедитесь, что вы добавили поведение Containable к любой модели, на которую вы ссылаетесь.

0 голосов
/ 24 февраля 2011

Чтобы удалить дубликаты, которые вы хотите использовать: GROUP BY в вашем запросе find all. Я думаю, что у Cake есть опция 'group' =>.

...