nepster-web
@nepster-web

Doctrine2 как правильно составить запрос ?

Есть теги на сайте. Они реализованы через таблицу связи (post_id, tag_id).
Нужно достать все новости с максимально повторяющимеся тегами.

У меня есть вот такой код:
SELECT Post.id, Post.title
        FROM news_post Post
        INNER JOIN `news_post_tags` Post_Tags
        ON  Post.id = Post_Tags.post_id
        WHERE Post_Tags.tag_id IN (1, 2, 3, 4, 5, 6, 7) 
        GROUP BY Post_Tags.post_id 
        ORDER BY COUNT( Post_Tags.tag_id ) DESC


он отлично работает и теперь его нужно написать с помощью доктрины.

Я начал писать:
return $this->getEntityManager()
            ->createQuery("SELECT Post "
                . "FROM IlichNewsBundle:Post Post "
                . "INNER JOIN Post.tags Tags "
            )
            ->setFirstResult(0)->setMaxResults(50)->getResult();


Доктрина генерирует что-то такое:
SELECT 
  n0_.id AS id0, 
  n0_.slug AS slug1, 
  ... 
FROM 
  news_post n0_ 
  INNER JOIN news_post_tags n2_ ON n0_.id = n2_.post_id 
  INNER JOIN Tag t1_ ON t1_.id = n2_.tag_id 
LIMIT 
  50 OFFSET 0


Так вот мне нужно получить доступ к таблице
INNER JOIN news_post_tags n2_ ON n0_.id = n2_.post_id

Тоесть сделать что то такое:
return $this->getEntityManager()
            ->createQuery("SELECT Post "
                . "FROM IlichNewsBundle:Post Post "
                . "INNER JOIN Post.tags Tags "
        GROUP BY n0_.post_id 
        ORDER BY COUNT( n0_.tag_id ) DESC;
            )
            ->setFirstResult(0)->setMaxResults(50)->getResult();


как можно задать алиас вот этот таблице news_post_tags ?
  • Вопрос задан
  • 2377 просмотров
Пригласить эксперта
Ответы на вопрос 1
@neolink
доктрина (в dql) не умеет сортировку по вычисляемому полю, либо нативный запрос либо sqlWalker
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы