«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как устранить ошибку «Ожидаемая доктрина\\ORM\\Query\\Lexer::T_WITH, получена \'ON\'» во время левых соединений в Doctrine?

Как устранить ошибку «Ожидаемая доктрина\\ORM\\Query\\Lexer::T_WITH, получена \'ON\'» во время левых соединений в Doctrine?

Опубликовано 8 ноября 2024 г.
Просматривать:121

How to Resolve the \

Как выполнять левые соединения в Doctrine

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

Обнаружена проблема

Распространенной ошибкой, которая может возникнуть при попытке левого соединения в 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