小编lcp*_*lcp的帖子

Doctrine 在多对多关联中获取 EAGER

使用 Symfony 3.2 和 Doctrine 2.5,我很难理解 fetch "EAGER" 在多对多和多对一关系中应该如何工作。

假设我们有两个实体,用户和站点,以及一个多对多关联:

class User
{
    /**
     * @ORM\ManyToMany(targetEntity="Site", inversedBy="users", fetch="EAGER")
     * @ORM\JoinTable(name="user_site")
     */
    private $sites;
}

class Site
{
    /**
     * @ORM\ManyToMany(targetEntity="User", mappedBy="sites")
     */
    private $users;
}
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我只需调用

 $users = $this->getDoctrine()->getRepository('CoreBundle:User')->findAll();
Run Code Online (Sandbox Code Playgroud)

我只想在 User 表上看到 1 个查询,并在 Site 表上进行联接,但我得到了 N+1 个查询。我还对多对一关联进行了一些测试,并得到了相同的结果。

我知道我可以使用 DQL 自己进行连接,但我想了解 fetch“EAGER” 的工作原理。

在多对多和多对一关联上获取“EAGER”的预期行为是什么?

eager-loading symfony doctrine-orm

5
推荐指数
1
解决办法
3198
查看次数

标签 统计

doctrine-orm ×1

eager-loading ×1

symfony ×1