При работе со сложными моделями данных возникает необходимость извлекать данные из нескольких таблиц путем установления связей между ними. Левые соединения позволяют получать все строки из одной таблицы и только соответствующие строки из другой таблицы.
Распространенной ошибкой, которая может возникнуть при попытке левого соединения в Doctrine, является получение следующая синтаксическая ошибка:
[Синтаксическая ошибка] строка 0, столбец 98: Ошибка: Ожидаемая Doctrine\ORM\Query\Lexer::T_WITH, получено 'ON'
Эта ошибка возникает, когда " ON» используется в предложении соединения вместо «WITH». Чтобы решить эту проблему, замените «ON» на «WITH», как показано ниже:
$qb->leftJoin('User\Entity\User', 'u', \Doctrine\ORM\Query\Expr\Join::WITH, 'a.user = u.id')
Чтобы выполнить левое соединение в Doctrine, существует два подхода:
С ассоциацией:
Если у вашей сущности есть ассоциация с таблицей, к которой вы хотите присоединиться, вы можете использовать следующий синтаксис:
$qb
->select('a', 'u')
->from('Credit\Entity\UserCreditHistory', 'a')
->leftJoin('a.user', 'u')
->where('u = :user')
->setParameter('user', $users)
->orderBy('a.created_at', 'DESC');
В этом случае «Credit\Entity\UserCreditHistory#user» представляет ассоциацию между двумя объектами.
Без ассоциации:
Если ассоциации не существует, вы можете использовать следующий синтаксис:
$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');
Этот запрос извлекает записи из обеих таблиц и возвращает набор результатов, содержащий массивы следующего формата:
array(
array(
0 => UserCreditHistory instance,
1 => Userinstance,
),
array(
0 => UserCreditHistory instance,
1 => Userinstance,
),
// ...
)
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3