gpt4 book ai didi

symfony - Doctrine2 急切加载运行多个查询而不是 1 个

转载 作者:行者123 更新时间:2023-12-02 16:27:38 25 4
gpt4 key购买 nike

我将 Symfony2 与 Doctrine2(最新版本)一起使用,并定义了此关系:

/**
* @ORM\OneToMany(targetEntity="Field", mappedBy="event", fetch="EAGER")
* @ORM\OrderBy({"name" = "ASC"})
*/
protected $fields;

关系的另一端定义为:

/**
* @ORM\ManyToOne(targetEntity="Event", inversedBy="fields", fetch="EAGER")
* @ORM\JoinColumn(nullable=false, onDelete="CASCADE")
*/
protected $event;

执行“fetchOnyById”时,Doctrine 运行 2 个查询。 1 获取对象本身,1 获取相关字段。我希望这是一个联接,但事实并非如此。

在 Controller 中完成后,我将对象传递给 twig。在那里,我再次检索字段作为对象的属性。这会导致运行另一个查询来再次检索字段。

显然我做错了什么,因为我预计只运行 1 个查询,而实际运行了 3 个查询。

最佳答案

我相信发生这种情况的原因是因为您正在获取实体,而不是特定的查询。 Doctrine 的想法是,您正在获取对象,而不是与数据库交互,而是与对象资源交互,就好像它们都像存储的实体一样关联/引用。如果您需要像您所描述的那样的查询,那么最好使用 DQL,但此时您不会获取创建的实体,而是会获得自定义结果。

我希望这是有道理的。

基本上,您使用的默认关联是获取关联对象而不是联接查询。

关于symfony - Doctrine2 急切加载运行多个查询而不是 1 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18159333/

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