こんにちは私はsymfony2アプリケーションに3つのDoctrine2エンティティを持っています:バンドルの2つ( "Promo"と "PromoPeriod")Acme:PromoBundle; 1つ(「Shop」)をバンドルAcme:ShopBundleに入れます。 関係は: プロモーション - プロモーション期間:多対です。 PromoPeriod - Shop:1対多。次のように実体「プロモ」のリポジトリに 異なるSymfony2バンドルの複数のエンティティを選択したDoctrine2クエリ
は、私はすべてのプロモーションを取得しようとお店:p.periodはプロモインスタンスpとPromoPeriod期間との関係を次のとおりです。return $this->getEntityManager()
->createQuery("SELECT p, s
FROM AcmePromoBundle:Promo p JOIN p.period pp JOIN pp.shops s")
->getResult();
; pp.shopsはPromoPeriod ppとショップの関係です。 次のエラーが返されます。
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'.")
だから、私は、それが別のバンドルに位置しているのでDoctrineは、(ショップエンティティである)、「S」のタイプを理解することはできないと主張しました。したがって、私はINSTANCE OF句を追加しようとしました:
SELECT p, s
FROM AcmePromoBundle:Promo p JOIN p.period pp JOIN pp.shops s
WHERE s INSTANCE OF AcmeShopBundle:Shop
もう一度何もしません。おそらく、これは問題を解決する方法ではないでしょう。
FQCNを使用するとどうなりますか? –
FQCNの使用方法は? Doctrine2ではSQL問合せが異なる方法で作成されていることに注意してください.Decrine2はORMであるためです。 – JeanValjean
Mmm、mmm、FQCN =完全修飾クラス名、エンティティを選択する方法は、Doctrine2エイリアス(AcmePromoBundle)を使用しています。このエイリアスは、クエリーの作成中にエンティティ名をショートカットするために使用され、実際のネームスペースに直接マッピングされます。私はFQCNを使用して、エイリアシングの問題であるかどうかを確認するよう依頼しました。 FQCNを選択すると、アプリケーションのどの部分でも機能するはずです。 –