Doctrine 2 запрос с несколькими объединениями - PullRequest
0 голосов
/ 12 июня 2018

Я застрял с запросом, и я надеюсь, что кто-то может помочь с моим кодом.

Мои классы выглядят так:

Персона 1 ------- 1.. * Участие 1 ... * -------- 1 Событие

Теперь у меня есть атрибут в классе Event, называемый isActive, а в классе Person у меня есть атрибут isChecked..

С помощью моего запроса я хочу вернуть всех «isChecked» лиц, которые не имеют участия в событии «isActive».

Пока это мой запрос, но он не возвращает то, чтоМне нужно:

$query = $em->createQueryBuilder('c')
        ->select('p')
        ->from('AppBundle:Person', 'p')
        ->andWhere('p.isChecked = true')
        ->leftJoin('p.participation', 'pa')
        ->andWhere('pa IS NULL')
        ->leftJoin('pa.event', 'e')
        ->andWhere('e.isActive = true');

Если кто-нибудь скажет мне, что я здесь делаю неправильно, было бы здорово.

С уважением, Себастьян

1 Ответ

0 голосов
/ 12 июня 2018

Вам нужно настроить присоединяющуюся часть с помощью предложения WITH, удалить ->andWhere('e.isActive = true') от места фильтрации и переместить это предложение в присоединяющуюся часть ваших сущностей, чтобы возвращались только те события (строки, которые объединены с pa), которые отмеченыas isActive.

DQL

SELECT p
FROM AppBundle:Person p
LEFT JOIN p.participation pa
LEFT JOIN pa.event e WITH e.isActive = true
WHERE p.isChecked = true
AND pa IS NULL

В построителе запросов вы можете представить его как

$query = $em->createQueryBuilder('c')
        ->select('p')
        ->from('AppBundle:Person', 'p')
        ->leftJoin('p.participation', 'pa')
        ->leftJoin('pa.event', 'e','WITH', 'e.isActive = true')
        ->andWhere('p.isChecked = true')
        ->andWhere('pa IS NULL');
...