Cuando se trabaja con modelos de datos complejos, es necesario recuperar datos de varias tablas estableciendo relaciones entre ellas. Las uniones por la izquierda le permiten recuperar todas las filas de una tabla y solo las filas coincidentes de la otra tabla.
Un error común que puede surgir al intentar una unión por la izquierda en Doctrine es recibir el siguiente error de sintaxis:
[Error de sintaxis] línea 0, columna 98: Error: Doctrine\ORM\Query\Lexer esperado::T_WITH, se puso 'ON'
Este error ocurre cuando " ON" se utiliza en la cláusula de unión en lugar de "WITH". Para resolver esto, reemplace "ON" con "WITH" como se muestra a continuación:
$qb->leftJoin('User\Entity\User', 'u', \Doctrine\ORM\Query\Expr\Join::WITH, 'a.user = u.id')
Para realizar una unión izquierda en Doctrine, hay dos enfoques:
Con una asociación:
Si su entidad tiene una asociación con la tabla a la que desea unirse, puede usar la siguiente sintaxis:
$qb
->select('a', 'u')
->from('Credit\Entity\UserCreditHistory', 'a')
->leftJoin('a.user', 'u')
->where('u = :user')
->setParameter('user', $users)
->orderBy('a.created_at', 'DESC');
En este caso, "Credit\Entity\UserCreditHistory#user" representa la asociación entre las dos entidades.
Sin asociación:
Si no existe ninguna asociación, puede utilizar la siguiente sintaxis:
$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 tablas y devuelve un conjunto de resultados que contiene matrices del siguiente formato:
array(
array(
0 => UserCreditHistory instance,
1 => Userinstance,
),
array(
0 => UserCreditHistory instance,
1 => Userinstance,
),
// ...
)
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3