使用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”的预期行为是什么?