Jea*_*ean 11 symfony doctrine-orm
您好我的Symfony2应用程序中有三个Doctrine2实体:两个("Promo"和"PromoPeriod")捆绑Acme:PromoBundle; Acme:ShopBundle捆绑中的一个("商店").关系是:Promo - PromoPeriod:多对一.PromoPeriod - 商店:一对多.
在实体"促销"的存储库中,我尝试获取所有促销和商店,如下所示:
return $this->getEntityManager()
->createQuery("SELECT p, s
FROM AcmePromoBundle:Promo p JOIN p.period pp JOIN pp.shops s")
->getResult();
Run Code Online (Sandbox Code Playgroud)
其中:p.period是Promo实例p和PromoPeriod期间之间的关系; 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'.")
Run Code Online (Sandbox Code Playgroud)
因此,我认为Doctrine无法理解"s"(它是Shop实体)的类型,因为它位于另一个包中.因此我尝试添加一个INSTANCE OF子句:
SELECT p, s
FROM AcmePromoBundle:Promo p JOIN p.period pp JOIN pp.shops s
WHERE s INSTANCE OF AcmeShopBundle:Shop
Run Code Online (Sandbox Code Playgroud)
再也没有.也许这不是解决问题的方法.
任何的想法?
Adr*_*ult 23
你应该选择3个实体,就像这样
SELECT p, pp, s
FROM AcmePromoBundle:Promo p
JOIN p.period pp
JOIN pp.shops s
Run Code Online (Sandbox Code Playgroud)
您正在进行获取连接,即:doctrine将返回查询根的实体(此处为Promo(s)),并使用其他选择实体进行水合.因此,如果你告诉学说要加载商店,那就是"从时间段来",但是不要选择期间......他不能做你要求它做的事.在这里,SQL查询很好,当教条试图水合它抛出异常的对象时.
阅读相关文档http://docs.doctrine-project.org/en/latest/reference/dql-doctrine-query-language.html#joins
| 归档时间: |
|
| 查看次数: |
19299 次 |
| 最近记录: |