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
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
@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