Hola Tengo tres entidades Doctrine2 en mi aplicación Symfony2: dos ("Promo" y "PromoPeriod") en el paquete Acme: PromoBundle; uno ("Comprar") en el paquete Acme: ShopBundle. Las relaciones son: Promo - PromoPeriod: Many-to-One. PromoPeriod - Shop: One-to-Many.Consulta de Doctrine2 con select en varias entidades de diferentes paquetes Symfony2
En el repositorio de la "Promo" entidad, trato de obtener toda la promo y las tiendas de la siguiente manera:
return $this->getEntityManager()
->createQuery("SELECT p, s
FROM AcmePromoBundle:Promo p JOIN p.period pp JOIN pp.shops s")
->getResult();
donde: p.period es la relación entre la instancia de Promoción py el período PromoPeriod ; pp.shops es la relación entre el PromoPeriod pp y las Tiendas. se devuelve el siguiente error:
An exception has been thrown during the rendering of a template
("The parent object of entity result with alias 's' was not found.
The parent alias is 'pp'.")
Así, argumenté que la doctrina no es capaz de entender el tipo de "s" (que es una entidad Shop), ya que se encuentra en otro paquete. Por lo tanto, intenté agregar una cláusula INSTANCE OF:
SELECT p, s
FROM AcmePromoBundle:Promo p JOIN p.period pp JOIN pp.shops s
WHERE s INSTANCE OF AcmeShopBundle:Shop
Y de nuevo nada. Quizás esta no sea la forma de resolver el problema.
¿Alguna idea?
Lo que si se utiliza el FQCN? –
¿Cómo debo usar el FQCN? Recuerde que en Doctrine2 las consultas SQL están formuladas de una manera diferente, ya que Doctrine2 es un ORM. – JeanValjean
Mmm, mmm, FQCN = Nombre de clase totalmente calificado, la forma en que selecciona Entidad es usar un alias de Doctrine2 (el AcmePromoBundle). El alias se usa para atajar el nombre de la Entidad al escribir una consulta, se asigna directamente al espacio de nombres real. Te pedí que intentaras usar el FQCN para verificar si era un problema de aliasing. Seleccionar FQCN debería funcionar en cualquier parte de su aplicación. –