Я обновляю этот вопрос ответом на CakePHP 3.x.
Вы можете найти все articles
для данного tag
, используя INNER JOIN. Преимущество этого объединения заключается в том, что оно сохраняет article в качестве основной таблицы в запросе. Сделать это простым решением, когда вы разбиваете на страницы результаты с помощью присоединения HABTM.
$tag_id = 3; // the ID of the tag
$query = $this->Articles->find('all')
->innerJoin('articles_tags', [
'Articles.id = articles_tags.article_id',
'articles_tags.tag_id' => $tag_id
]);
Первым условием соединения должен быть ключ массива. Если вы используете массив =>
, то CakePHP передаст articles_tags.article_id
в качестве аргумента string в условие соединения. Который не будет работать.
Вы также можете сложить innerJoin
для нескольких условий HABTM. Например; найти все статьи для тега , а также для категории . Вы также можете использовать выражение запроса in
для сопоставления нескольких тегов .
Вы также можете использовать вышеперечисленное в нумерации страниц, как это $articles = $this->paginate($query);
Я уверен, что эта информация опубликована в Интернете, но этот вопрос был главным в результатах поиска Google. Так что, возможно, это поможет другим.