Symfony 2 Doctrine | Entity должен иметь все теги

#mysql #sql #symfony #doctrine

#mysql #sql #symfony #доктрина

Вопрос:

Я использую Symfony 2 и doctrine. У меня есть 4 объекта: CustomPage, Tag, CustomPageTag, комментарий.

Каждая пользовательская страница может иметь много тегов и много комментариев. Я хочу выбрать пользовательскую страницу (со всеми комментариями), которая имеет некоторые конкретные теги.

Пример: я хочу выбрать пользовательскую страницу с помощью ‘tag1’ И ‘tag2’

Я сделал это,

 SELECT CUSTOMPAGE, TAG, CUSTOMPAGE_TAG, COMMENT
FROM CustomBundle:CustomPage CUSTOMPAGE
JOIN CUSTOMPAGE.comments COMMENT
JOIN CUSTOMPAGE.tags CUSTOMPAGE_TAG
JOIN CUSTOMPAGE_TAG.tag TAG
WHERE TAG.name IN ('tag1','tag2')
GROUP BY CUSTOMPAGE.id
HAVING COUNT(DISTINCT CUSTOMPAGE_TAG.name) = 2
 

Это работает хорошо, но проблема в том, что он возвращает только один комментарий (я хочу все это).

Комментарии:

1. Вместо объединения вы пытались соединить три таблицы слева?

2. Нет, то же самое! Он возвращает хороший результат, но без комментариев!

Ответ №1:

вы просто получаете один комментарий из-за использования group by, вместо этого используйте два join .

попробуйте это:

 SELECT CUSTOMPAGE, TAG1, CUSTOMPAGE_TAG, COMMENT
FROM CustomBundle:CustomPage CUSTOMPAGE
JOIN CUSTOMPAGE.comments COMMENT
JOIN CUSTOMPAGE.tags CUSTOMPAGE_TAG
JOIN CUSTOMPAGE_TAG.tag TAG1
JOIN CUSTOMPAGE_TAG.tag TAG2
WHERE TAG1.name= 'tag1'
AND TAG2.name= 'tag2'
 

Ответ №2:

Я, наконец, нашел это! Доктрина позволяет использовать exsist ! итак :

 $qb->expr()->exists('SELECT b...') 
 

Спасибо вам, ребята, за помощь.