【发布时间】:2012-06-18 11:56:18
【问题描述】:
您好,我的 Symfony2 应用程序中有三个 Doctrine2 实体:Acme:PromoBundle 包中有两个(“Promo”和“PromoPeriod”); Acme:ShopBundle 包中的一个(“Shop”)。 关系是: 促销 - 促销期:多对一。 PromoPeriod - 商店:一对多。
在实体“促销”的存储库中,我尝试获取所有促销和商店,如下所示:
return $this->getEntityManager()
->createQuery("SELECT p, s
FROM AcmePromoBundle:Promo p JOIN p.period pp JOIN pp.shops s")
->getResult();
其中:p.period是Promo实例p与PromoPeriod周期的关系; pp.shops 是 PromoPeriod pp 和 Shops 之间的关系。 返回以下错误:
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”的类型(这是一个 Shop 实体),因为它位于另一个捆绑包中。因此我尝试添加一个 INSTANCE OF 子句:
SELECT p, s
FROM AcmePromoBundle:Promo p JOIN p.period pp JOIN pp.shops s
WHERE s INSTANCE OF AcmeShopBundle:Shop
又没有。也许这不是解决问题的方法。
有什么想法吗?
【问题讨论】:
-
我应该如何使用FQCN?请记住,在 Doctrine2 中,SQL 查询是以不同的方式制定的,因为 Doctrine2 是一个 ORM。
-
Mmm, mmm, FQCN = 完全限定的类名,您选择实体的方式是使用 Doctrine2 别名(AcmePromoBundle)。别名用于在编写查询时简化实体名称,它直接映射到实际的命名空间。我请您尝试使用 FQCN 来检查是否是混叠问题。选择 FQCN 应该适用于您的应用程序的任何部分。
-
关键是我不明白该怎么做!请举个例子。
-
不要使用
AcmePromoBundle:Promo,而是使用Acme\PromoBundle\Promo -
它不起作用。返回以下错误:
Error: Class 'Acme\PromoBundle\Promo' is not defined.")
标签: symfony doctrine-orm