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