使用Symfony 2.8。Symfony和Doctrine:懒加载不起作用
我社区和菜单项实体,其中社区有一组的MenuItems。
Community.php具有下面的代码:
...
/**
* @ORM\OneToMany(targetEntity="MenuItem", mappedBy="community", fetch="LAZY")
* @ORM\OrderBy({"sequence" = "ASC"})
*/
private $menuItems;
...
MenuItem.php具有下面的代码:
...
/**
* @var Community
*
* @ORM\ManyToOne(targetEntity="Community", inversedBy="menuItems")
*/
private $community;
...
的一点是,当我使用:
$menuItems = $community->getMenuItems();
the $menuItems
变量将是一个空集合。
的问题可以通过设置fetch="EAGER"
而不是fetch="LAZY"
,因为在这种方式类别实体的$menuItems
属性立刻加载来解决。
LAZY VS EAGER(source):
只要您手边有一个管理实体实例,您可以遍历和使用,就好像他们是在内存中已经被配置LAZY该实体的任何关联。 Doctrine将通过延迟加载的概念按需自动加载关联的对象。
每当您查询具有持久关联的实体并将这些关联映射为EAGER时,它们将自动与正在查询的实体一起加载,因此可立即供您的应用程序使用。
问题是,虽然EAGER加载按预期工作,但LAZY加载似乎根本不起作用。任何想法为什么?