#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...')
Спасибо вам, ребята, за помощь.