使用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加載似乎根本不起作用。任何想法爲什麼?