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.
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')
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,
),
// ...
)
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