У меня есть 3 таблицы блогов в моем приложении CakePHP, которые связаны с ассоциацией HABTM в соответствии с соглашениями об именах CakePHP: сообщения - post_tag_links - теги.
Я пытаюсь получить массив со всеми сообщениями, которые связаны с определенным тегом (например, «дизайн»). Этот запрос работает для меня:
$this->Post->query("
SELECT
Post.id, Post.title FROM posts AS Post
LEFT JOIN
post_tag_links AS PostTagLink ON Post.id = PostTagLink.post_id
LEFT JOIN
tags AS Tag ON Tag.id = PostTagLink.tag_id
WHERE
Tag.slug = 'design'
GROUP BY
Post.id"
);
Затем CakePHP генерирует следующий запрос и дает мне 4 результата:
SELECT
Post.id,
Post.title
FROM
posts AS Post
LEFT JOIN
post_tag_links AS PostTagLink
ON Post.id = PostTagLink.post_id
LEFT JOIN
tags AS Tag
ON Tag.id = PostTagLink.tag_id
WHERE
Tag.slug = 'design'
GROUP BY
Post.id
НО... чтобы попрактиковаться, лучше не использовать метод "запрос". Итак, я попробовал метод «найти все»:
$this->Post->find('all', array(
'fields' => array(
'Post.id',
'Post.title'
),
'joins' => array(
array(
'table' => 'post_tag_links',
'alias' => 'PostTagLink',
'type' => 'LEFT',
'conditions' => array(
'Post.id' => 'PostTagLink.post_id'
)
),
array(
'table' => 'tags',
'alias' => 'Tag',
'type' => 'LEFT',
'conditions' => array(
'Tag.id' => 'PostTagLink.tag_id',
)
)
),
'conditions' => array(
'Tag.slug' => 'design'
),
'group' => 'Post.id'
)
));
Затем CakePHP генерирует следующий запрос и не дает ни одного результата:
SELECT
`Post`.`id`,
`Post`.`title`
FROM
`kattenbelletjes`.`posts` AS `Post`
LEFT JOIN
`kattenbelletjes`.`post_tag_links` AS `PostTagLink`
ON (
`Post`.`id` = 'PostTagLink.post_id'
)
LEFT JOIN
`kattenbelletjes`.`tags` AS `Tag`
ON (
`Tag`.`id` = 'PostTagLink.tag_id'
)
WHERE
`Tag`.`slug` = 'design'
GROUP BY
`Post`.`id
После множества проб и ошибок я обнаружил, что проблема заключается в обратных кавычках, которые CakePHP создает при построении этого последнего запроса.
Мой вопрос: в чем разница между запросом с обратными кавычками и запросом без обратных кавычек? И как вы можете оставить эти обратные кавычки в CakePHP?
Спасибо ;)