У меня есть вот такой запрос, для получения похожих записей по тегу
SELECT Post.title, Post_Tags.article_id, count(*) count_alike_tags
FROM `article_tags` Post_Tags
LEFT JOIN `Article` Post
ON Post_Tags.article_id = Post.id
WHERE tag_id IN (SELECT tag_id FROM article_tags Post_Tags_Alias
WHERE Post_Tags_Alias.article_id = :id AND Post_Tags.article_id <>
Post_Tags_Alias.article_id)
GROUP BY Post_Tags.article_id
ORDER BY count_alike_tags DESC;
Я покопал доки и конвентировал его в доктрину примерно вот так:
$em = $this->getDoctrine()->getEntityManager();
$connection = $em->getConnection();
$statement = $connection->prepare("
SELECT Post.title, Post_Tags.article_id, count(*) count_alike_tags
FROM `article_tags` Post_Tags
LEFT JOIN `Article` Post
ON Post_Tags.article_id = Post.id
WHERE tag_id IN (SELECT tag_id FROM article_tags Post_Tags_Alias
WHERE Post_Tags_Alias.article_id = :id AND Post_Tags.article_id <>
Post_Tags_Alias.article_id)
GROUP BY Post_Tags.article_id
ORDER BY count_alike_tags DESC;
");
$statement->bindValue('id', 1);
$statement->execute();
$results = $statement->fetchAll();
Тут сразу 2 вопроса. Как все же правильно его организовать, ну скажем возможно есть более изящный вариант ? Как я понял писать такие штуки да и вообще доктрину в контроллере не хорошо, поэтому нужно создать новый класс в Entity, например PostManager и записывать все туда. Я правильно понял ?