Я хотел бы понять joins
в CakePHP (ст 2.4.5) немного лучше, решая следующий пример:РЕГИСТРИРУЙТЕСЬ в CakePHP - лучшее понимание
Post hasMany Comment
Post.id == Comment.post_id
Comment.published
может быть 1
или 0
- Мне нужно найти все сообщения, которые имеют по крайней мере один опубликован комментарий
- Я хочу написать запрос от модели
Post
. Для того, чтобы не нарушать нумерацию страниц, и поэтому я могу добавить заказ/условия, основанные наPost
- Я не хочу, чтобы отфильтровать результаты впоследствии в PHP (для того, чтобы не нарушать нумерацию страниц)
Вы могли бы предложить подойти этот вопрос из Comment
модели, как здесь:
https://stackoverflow.com/a/3890461/155638
Но это про понимание присоединяется лучше, поэтому я хотел бы установить требование, чтобы написать запрос от Post
модели.
У меня есть примерно следующая идея, в надежде, что право присоединиться к исключило бы все не соответствующие требования сообщения:
$this->Post->find('all', array(
'joins' => array(
array(
'table' => 'comments',
'alias' => 'CommentsJoined',
'type' => 'RIGHT',
'conditions' => array(
'Post.id = CommentsJoined.post_id',
'CommentsJoined.published = true'
)
)
),
'contain' => array(
'Comment' => array(
'conditions' => array(
'Comment.published' => 1
)
)
)
);
Но это не сработало для меня пока.
В настоящее время мой запрос возвращает 19 раз тот же пост, а не 19 уникальных сообщений.
Как это сделать? Правильно ли этот подход?
С уважением!
Bart