Задать вопрос

Как правильно организовать сложные запросы в doctrine ?

У меня есть вот такой запрос, для получения похожих записей по тегу
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 и записывать все туда. Я правильно понял ?
  • Вопрос задан
  • 2436 просмотров
Подписаться 4 Комментировать
Подписчики вопроса 4 К ответам на вопрос (0)