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 ?
  • Вопрос задан
  • 2380 просмотров
Пригласить эксперта
Ответы на вопрос 1
@neolink
доктрина (в dql) не умеет сортировку по вычисляемому полю, либо нативный запрос либо sqlWalker
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы