当我在使用Doctrine ORM的Symfony2中使用多对多关系时,我遇到的问题是我的多对多关系未得到解决。
示例:
Class A:
/**
* @ORM\ManyToMany(targetEntity="StoreItem", mappedBy="itemOptions")
*/
protected $storeItems;
Class B:
/**
* @ORM\ManyToMany(targetEntity="StoreItemOption", inversedBy="storeItems")
* @ORM\JoinTable(name="store_item_itemoptions")
*/
protected $itemOptions;
现在我将对象存储在一个会话中,注意我还没有使用
来调用多对多的关系 ->getItemOptions()
当我现在获得会话对象并执行 - > getItemOptions()时,它就是空的。
任何人都知道造成这种情况的原因是什么?
(PS:我发现一个hacky解决方案,当我向我的购物车添加一个项目时,我做了一个空的foreach调用方法 - > getItemOptions())
答案 0 :(得分:1)
这称为“延迟加载”,是一种旨在减少内存开销的学说功能。
您可以将加载设置为'eager'或为DQL中的其他字段显式添加select以避免延迟加载:例如:
$objectsA=$em->createQueryBuilder('\Class\A', 'a')
->join('a.b', 'b')
->addSelect('b')
->getQuery()
->getResult();