Левое присоединение к условию И другой синтаксис условий в Доктрине

Я использую конструктор запросов Doctrine в Symfony2 для создания запроса для извлечения сущностей.

Мой текущий код выглядит следующим образом:

$repository = $this->getDoctrine()->getRepository('AaaBundle:Application'); $queryBuilder = $repository->createQueryBuilder('a'); $queryBuilder ->addSelect('u') ->addSelect('i') ->orderBy('a.created_date', 'DESC') ->leftJoin('a.created_by', 'u') ->leftJoin('a.installations', 'i') //->where('i.page = :page') //->setParameter('page', $found) ; 

Теперь я могу использовать это, чтобы получить все страницы независимо от их установки или нет. Но я хочу только присоединиться к ним, поскольку доступна $found страница $found (так что если есть приложение для приложения, но оно находится на другой странице, установка не будет объединена). Если я не укажу предложение where, оно покажет только те приложения, которые имеют установку для этой страницы. Я хочу, чтобы все приложения с или без установок для этой страницы.

В SQL я могу получить это, добавив AND к соединению

 LEFT JOIN installations i ON a.id = i.app AND i.page = :page 

Таким образом, я получаю информацию о установке для приложения, которое имеет установку на странице, но я получаю нулевые значения в столбцах для приложений, у которых есть установки на других страницах или вообще нет.

Есть ли способ сделать это в Doctrine, или мне лучше просто получить все установки для каждого приложения, а затем проверить на найденной странице с помощью php?

Вы можете попробовать следующее:

 use Doctrine\ORM\Query\Expr; ->leftJoin('a.installations', 'i', Expr\Join::WITH, 'i.page = :page') ->setParameter('page', $page) 

См. Функцию leftJoin в документе: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/query-builder.html#high-level-api-methods