query - symfony doctrine español
"PathExpression no válido. Debe ser una StateFieldPathExpression ”en el generador de consultas con entidades no relacionadas (2)
Me contesto desde que encontré cómo solucionarlo:
$qb->select(''IDENTITY(od.media)'', ''IDENTITY(od.type) AS doc_type'', ''IDENTITY(od.status) AS doc_status'', ''md.url'', ''nms.name'', ''nmt.name'');
Como od.media
, od.type
, od.status
son claves compuestas, entonces necesito agregar IDENTITY
para que la consulta funcione y solucione el problema
Tengo cuatro entidades: OfficialDocument
, Media
, NMediaStatus
y NMediaType
. Estoy tratando de traducir este SQL:
SELECT od.media, od.type, od.status, md.url, nms.name
FROM official_document od
LEFT JOIN media md ON od.media = md.id
LEFT JOIN n_media_status nms ON od.status = nms.id
WHERE od.company = 9
a Doctrine Query Builder y este es el resultado:
public function findOfficialDocument($company_id) {
$qb = $this->getEntityManager()->createQueryBuilder();
$qb->select(''od.media'', ''od.type'', ''od.status'', ''md.url'', ''nms.name'', ''nmt.name'');
$qb->from(''Company/RegisterCompanyBundle/Entity/OfficialDocument'', ''od'');
$qb->leftJoin(''Common/MediaBundle/Entity/Media'', ''md'', /Doctrine/ORM/Query/Expr/Join::WITH, ''od.media = md.id'');
$qb->leftJoin(''Common/MediaBundle/Entity/NMediaStatus'', ''nms'', /Doctrine/ORM/Query/Expr/Join::WITH, ''od.status = nms.id'');
$qb->leftJoin(''Common/MediaBundle/Entity/NMediaType'', ''nmt'', /Doctrine/ORM/Query/Expr/Join::WITH, ''od.type = nmt.id'');
$qb->where(''od.company = ?1'');
$qb->setParameter(1, $company_id);
return $qb->getQuery()->getResult();
}
Pero cada vez que llamo a la función desde mi controlador me sale este error:
[Error semántico] línea 0, columna 10 cerca de ''media, od.type'': Error: PathExpression no válido. Debe ser un StateFieldPathExpression.
[1/2] QueryException: SELECT od.media, od.type, od.status, md.url, nms.name, nmt.name DE la compañía / RegisterCompanyBundle / Entity / OfficialDocument od LEFT JOIN Common / MediaBundle / Entity / Media md WITH od.media = md.id LEFT JOIN Common / MediaBundle / Entity / NMediaStatus nms WITH od.status = nms.id LEFT JOIN Common / MediaBundle / Entity / NMediaType nmt WITH od.type = nmt.id WHERE od.company =? 1
OfficialDocument
está relacionado con las otras tres entidades, pero dado que no necesito la reversedBy
En esas entidades, es difícil que esto esté causando el error, o tal vez no, no estoy seguro. De todos modos, ¿algún consejo o ayuda para solucionar este problema?
PD: Estoy usando la última versión de Symfony2 y Doctrine2 si necesitas echar un vistazo a mis entidades, aquí están: OfficialDocument , Media , NMediaStatus , NMediaType
Simplemente puedes usar ()
donde existen claves compuestas.
$qb->select(''(od.media)'', ''(od.type) AS doc_type'', ''(od.status) AS doc_status'', ''md.url'', ''nms.name'', ''nmt.name'');