Witam Mam trzy obiekty Doctrine2 w mojej aplikacji Symfony2: dwie ("Promo" i "PromoPeriod") w pakiecie Acme: PromoBundle; jeden ("Shop") w pakiecie Acme: ShopBundle. Relacje są następujące: Promo - PromoPeriod: Wiele-do-jednego. PromoPeriod - Sklep: Jeden-do-wielu.Prośba Doctrine2 z wybieraniem wielu podmiotów z różnych pakietów Symfony2
w repozytorium podmiotu „Promo”, staram się uzyskać wszystkie promo i sklepów, co następuje:
return $this->getEntityManager()
->createQuery("SELECT p, s
FROM AcmePromoBundle:Promo p JOIN p.period pp JOIN pp.shops s")
->getResult();
gdzie: p.period jest zależność między instancji Promo p i okresu PromoPeriod ; pp.shops to relacja między PromoPeriod pp i sklepami. następujący błąd jest zwracany:
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'.")
Tak, twierdził, że nauka nie jest w stanie zrozumieć typ „S” (który jest jednostką Shop), ponieważ znajduje się w innym pakiecie. W związku z tym próbowałem dodać klauzulę INSTANCJI:
SELECT p, s
FROM AcmePromoBundle:Promo p JOIN p.period pp JOIN pp.shops s
WHERE s INSTANCE OF AcmeShopBundle:Shop
I znowu nic. Być może nie jest to sposób na rozwiązanie problemu.
Każdy pomysł?
Co jeśli używasz FQCN? –
Jak korzystać z FQCN? Pamiętaj, że w Doctrine2 zapytanie SQL jest sformułowane w inny sposób, ponieważ Doctrine2 jest ORM. – JeanValjean
Mmm, mmm, FQCN = W pełni kwalifikowana nazwa klasy, sposób w jaki wybierasz Podmiot używa aliasu Doctrine2 (AcmePromoBundle). Alias jest używany do skrótu nazwy jednostki podczas pisania zapytania, jest bezpośrednio odwzorowany na rzeczywisty obszar nazw. Poprosiłem cię, abyś spróbował użyć FQCN, aby sprawdzić, czy to był problem z aliasingiem. Wybór FQCN powinien działać w dowolnej części aplikacji. –