Как сделать левое присоединение к Доктрине?

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

Это то, что я пытаюсь сделать:

public function getHistory($users) { $qb = $this->entityManager->createQueryBuilder(); $qb->select(array('a','u')) ->from('Credit\Entity\UserCreditHistory', 'a') ->leftJoin('User\Entity\User', 'u', \Doctrine\ORM\Query\Expr\Join::WITH, 'a.user = u.id') ->where("a.user = $users ") ->orderBy('a.created_at', 'DESC'); $query = $qb->getQuery(); $results = $query->getResult(); return $results; } 

Однако я получаю эту ошибку:

[Синтаксическая ошибка] строка 0, col 98: Ошибка: Ожидаемая доктрина \ ORM \ Query \ Lexer :: T_WITH, получена 'ON'

Изменить : я заменил «ON» на «WITH» в предложении join, и теперь я вижу только 1 значение из объединенного столбца.

Если у вас есть ассоциация на свойстве, указывающем на пользователя (допустим, имя пользователя Credit\Entity\UserCreditHistory#user , выбранного из вашего примера), то синтаксис довольно прост:

 public function getHistory($users) { $qb = $this->entityManager->createQueryBuilder(); $qb ->select('a', 'u') ->from('Credit\Entity\UserCreditHistory', 'a') ->leftJoin('a.user', 'u') ->where('u = :user') ->setParameter('user', $users) ->orderBy('a.created_at', 'DESC'); return $qb->getQuery()->getResult(); } 

Поскольку вы применяете условие к объединенному результату здесь, использование LEFT JOIN или просто JOIN – это то же самое.

Если связь отсутствует, запрос выглядит следующим образом:

 public function getHistory($users) { $qb = $this->entityManager->createQueryBuilder(); $qb ->select('a', 'u') ->from('Credit\Entity\UserCreditHistory', 'a') ->leftJoin( 'User\Entity\User', 'u', \Doctrine\ORM\Query\Expr\Join::WITH, 'a.user = u.id' ) ->where('u = :user') ->setParameter('user', $users) ->orderBy('a.created_at', 'DESC'); return $qb->getQuery()->getResult(); } 

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

 array( array( 0 => UserCreditHistory instance, 1 => Userinstance, ), array( 0 => UserCreditHistory instance, 1 => Userinstance, ), // ... )