Symfony – Использование внешних соединений с доктриной ORM

У меня есть три объекта: « User , « Answer и « Question .

Существует связь OneToMany между User и Answer и отношение ManyToOne между Answer и Question . В принципе, конкретный пользователь, возможно, дает ответы на кучу вопросов.

То, что я пытаюсь выполнить в мире ORM, – это получение ВСЕХ вопросов и связанных с ними ответов для конкретного пользователя. Основная часть заключается в том, что пользователь, возможно, не ответил на конкретный вопрос, но я все еще хочу получить этот вопрос (с нулевым ответом).

Answer Мой Answer имеет поле «пользователь», которое сопоставляется с объектом « User который инвертируется полем «ответы» внутри объекта « User . Если я использую это поле «ответы» внутри объекта User , я получаю только пары вопросов / ответов, на которые пользователь ответил. У меня нет вопросов, на которые пользователь не ответил.

Как правило, используя необработанный SQL, это связано с простым «левым внешним соединением» между моей таблицей вопросов и ответов, но я хочу, чтобы это было сделано с помощью ORM от Doctrine. Какие-либо предложения? Я довольно новичок в мире ORM.

Я сделал это! Вот как:

Я создал поле в своем объекте Question которое содержит все ответы от всех пользователей по этому конкретному вопросу; его сопоставлено с отношением OneToMany к объекту Answer . И затем, чтобы убедиться, что мы ограничиваем этот список ответами для конкретного пользователя, я создал специальный репозиторий для объекта Question и создал следующую функцию:

 public function findAllJoinedToAnswer($user) { $query = $this->getEntityManager() ->createQuery(' SELECT q, a FROM Bundle:Question q LEFT JOIN q.answers a WITH a.user = :user' )->setParameter('user', $user); try{ return $query->getResult(); }catch (\Doctrine\ORM\NoResultException $e) { return null; } } 

Просто передайте экземпляр объекта User и voila!