Это моя функция, когда я пытаюсь показать историю пользователей. Для этого мне нужно отобразить текущие кредиты пользователя вместе с его кредитной историей.
Это то, что я пытаюсь сделать:
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, ), // ... )