symfony - Doctrine2 查询,从不同的 Symfony2 包中选择多个实体

标签 symfony doctrine-orm

您好,我的 Symfony2 应用程序中有三个 Doctrine2 实体:捆绑 Acme:PromoBundle 中的两个(“Promo”和“PromoPeriod”); Acme:ShopBundle 包中的一个(“Shop”)。
关系是:
促销 - PromoPeriod:多对一。
PromoPeriod - 商店:一对多。

在实体“Promo”的存储库中,我尝试按如下方式获取所有促销和商店:

    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

又什么都没有。也许这不是解决问题的方法。

任何的想法?

最佳答案

您应该像这样选择 3 个实体

SELECT p, pp, s
FROM AcmePromoBundle:Promo p
JOIN p.period pp
JOIN pp.shops s

您正在执行获取连接,即:学说将返回查询根的实体(此处为 Promo(s)),并将其与其他选择实体混合。
因此,如果您告诉教义加载商店,则“来自”期间,但不选择期间……他无法执行您要求它执行的操作。
在这里,SQL 查询运行良好,当学说尝试对对象进行水合时,它会抛出异常。

阅读相关文档http://docs.doctrine-project.org/en/latest/reference/dql-doctrine-query-language.html#joins

关于symfony - Doctrine2 查询,从不同的 Symfony2 包中选择多个实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11082305/

相关文章:

php - 使用 Symfony2 的表单 - 具有一些不可变构造函数参数和 OneToMany 关联的 Doctrine Entity

Symfony2 - 从编译器 channel 访问内核

php - Symfony2 通过 REST API 发布文件

php - 交响乐 : Get key value from object doctrine

php - Doctrine manyToMany 返回 PersistentCollection 而不是 ArrayCollection

mysql - Symfony2 - Doctrine - 连接 2 个表

php - 在 Symfony2 中,如何从 FormBuilder 获取标签

symfony - 使用多个实体管理器解析目标实体

symfony - Doctrine 二级缓存 w/Redis

php - Doctrine 查询类不在实体目录中