Сопоставление NOT IN с двумя объектами с помощью QueryBuilder

У меня есть две сущности ServeApp и App. Оба они имеют отношение к AppPage. Я пытаюсь получить ServeApps, у которых есть AppPages, которых нет в приложении.

Поэтому ServeApps.appPages не должен содержать те же AppPages, что и Apps.appPages.

Я пытаюсь написать DQL-запрос, похожий на

SELECT ServeApps WHERE ServeApps.appPages NOT IN Apps.appPages

но я в недоумении, как это сделать. Я попробовал $queryBuilder->whereNotIn(), но я думаю, что этого метода не существует?

Любая помощь будет оценена по достоинству :)

РЕДАКТИРОВАТЬ:

В итоге я изменил свой подход. Поскольку AppPages имели отношение многие ко многим как к ServeApps, так и к приложениям, я сделал следующее:

SELECT sa FROM ServeApps sa WHERE sa.id NOT IN (
  SELECT ssa.id FROM AppPage ap JOIN ap.serveApps ssa WHERE ap.id = :apppage
)

Я изменил свою логику, исключив приложения из уравнения, а затем проверил это по-другому. У меня также была версия, в которой я приводил необработанный SQL для подсчета ServeApps.


person juuga    schedule 02.07.2013    source источник


Ответы (1)


Ваше заявление о том, где нет, должно выглядеть так

$queryBuilder->where($queryBuilder->expr()->notIn('alias.field', $arrayOfValues));

Вы можете найти ссылки на все выражения в документации Doctrine. .

В качестве примечания, оператор where-in должен выглядеть так:

$queryBuilder->where($queryBuilder->expr()->in('alias.field', $arrayOfValues));
person Thomas Potaire    schedule 02.07.2013
comment
Спасибо, Томас, я действительно пытался это сделать, но у меня возникали ошибки при присоединении к нему. На самом деле я закончил с чем-то совершенно другим, когда изменил свой подход. Смотрите мое редактирование - person juuga; 03.07.2013