"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como resolver o erro \"Expected Doctrine\\ORM\\Query\\Lexer::T_WITH, obteve \'ON\'\" durante junções à esquerda no Doctrine?

Como resolver o erro \"Expected Doctrine\\ORM\\Query\\Lexer::T_WITH, obteve \'ON\'\" durante junções à esquerda no Doctrine?

Publicado em 2024-11-08
Navegar:290

How to Resolve the \

Como realizar junções à esquerda no Doctrine

Ao trabalhar com modelos de dados complexos, torna-se necessário recuperar dados de múltiplas tabelas, estabelecendo relacionamentos entre elas. As junções à esquerda permitem que você busque todas as linhas de uma tabela e apenas as linhas correspondentes da outra tabela.

Problema encontrado

Um erro comum que pode surgir ao tentar uma junção à esquerda no Doctrine é receber o seguinte erro de sintaxe:

[Erro de sintaxe] linha 0, col 98: Erro: Expected Doctrine\ORM\Query\Lexer::T_WITH, obteve 'ON'

Este erro ocorre quando " ON" é usado na cláusula de junção em vez de "WITH". Para resolver isso, substitua "ON" por "WITH" conforme mostrado abaixo:

$qb->leftJoin('User\Entity\User', 'u', \Doctrine\ORM\Query\Expr\Join::WITH, 'a.user = u.id')

Implementando Left Joins

Para realizar uma left join no Doctrine, existem duas abordagens:

Com uma associação:

Se sua entidade tiver uma associação com a tabela que você deseja ingressar, você pode usar a seguinte sintaxe:

$qb
    ->select('a', 'u')
    ->from('Credit\Entity\UserCreditHistory', 'a')
    ->leftJoin('a.user', 'u')
    ->where('u = :user')
    ->setParameter('user', $users)
    ->orderBy('a.created_at', 'DESC');

Neste caso, "Credit\Entity\UserCreditHistory#user" representa a associação entre as duas entidades.

Sem uma associação:

Se não existir nenhuma associação, você pode usar a seguinte sintaxe:

$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');

Esta consulta recupera registros de ambas as tabelas e retorna um conjunto de resultados contendo matrizes do seguinte formato:

array(
    array(
        0 => UserCreditHistory instance,
        1 => Userinstance,
    ),
    array(
        0 => UserCreditHistory instance,
        1 => Userinstance,
    ),
    // ...
)
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3