Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Problema con consulta Doctrine en producción

12 de mayo de 2016

Estimados.

Tengo un problema, la siguiente consulta,

$qb = $em->createQueryBuilder()
            ->select('mn')
            ->from('AppBundle:mantencion', 'mn')            
            ...
            ->andWhere('mn.deptoId = :deptoId') // Error
            ...
            ->setParameter('deptoId', $depto)
            ...
        ;

Al procesar la consulta:

$qb->getQuery()->getResult();

Me arroja un error en producción, pero no en desarrollo.

Al revisar el prod.log me arrojó este error.

request.CRITICAL: Doctrine\ORM\Query\QueryException: [Semantical Error] line 0, col 98 near 'deptoId = :deptoId': Error: Class Intranet\ControlTiempoBundle\Entity\mantencion has no field or association named deptoId (uncaught exception) at C:\xampp\htdocs\dev\vendor\doctrine\orm\lib\Doctrine\ORM\Query\QueryException.php line 49 [] []

Al quitar deptoId = :deptoId, la consulta se procesa correctamente.


Respuestas

#1

Lo de que te funcione en desarrollo pero no en producción es muy raro. En cualquier caso, al hacer las consultas de Doctrine no hace falta que pongas el sufijo Id en los campos relacionados. Sería algo así:

$qb = $em->createQueryBuilder()
    ->select('mn')
    ->from('AppBundle:mantencion', 'mn')            
    // ...
    ->andWhere('mn.depto = :deptoId')
    // ...
    ->setParameter('deptoId', $depto)
    // ...
;

En la definición de tu entidad, la propiedad seguramente se llama $depto, que es lo recomendado, en vez de $deptoId. En resumen: aunque se usan los id para hacer las consultas, las propiedades relacionadas nunca añaden el id en sus nombres ni en las consultas.

@javiereguiluz

14 mayo 2016, 15:45
#2

@javiereguiluz

En la entidad existe.

  • $depto // Nombre del departamento.
  • $deptoId // Identificador.

Como la base de datos es de solo lectura, debo almacenar los datos de referencia en la tabla. Lo más raro es que ejecuto la consulta en entorno desarrollo y me devuelve los registros, pero en produccion no sucede.

Solo sucede al ejecutar la consulta (getArrayResult(), getResult(), etc...)

Otra cosa que me sucedio con la entidad es que el objeto(s) relacionado(s) no me deja almacenarlo en la sesión de usuario. Error señalado en que no se puede serializar.

Saludos.

@dariongg

16 mayo 2016, 15:34