gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 01:38:31 25 4
gpt4 key购买 nike

您好,我的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com