Doctrine在多对多关联中获取EAGER

时间:2017-06-05 17:10:01

标签: symfony doctrine-orm eager-loading

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

假设我们有两个实体,User和Site,以及多对多关联:

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;
}

在我的控制器中,我只需拨打

 $users = $this->getDoctrine()->getRepository('CoreBundle:User')->findAll();

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

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

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

0 个答案:

没有答案