"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo resolver el error \"Expected Doctrine\\ORM\\Query\\Lexer::T_WITH, got \'ON\'\" durante las uniones izquierdas en Doctrine?

¿Cómo resolver el error \"Expected Doctrine\\ORM\\Query\\Lexer::T_WITH, got \'ON\'\" durante las uniones izquierdas en Doctrine?

Publicado el 2024-11-08
Navegar:885

How to Resolve the \

Cómo realizar uniones izquierdas en Doctrine

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.

Problema encontrado

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

Implementando uniones izquierdas

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,
    ),
    // ...
)
Último tutorial Más>

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