0

当我在 Symfony2 中使用 Doctrine ORM 使用多对多关系时,我得到的问题是我的多对多关系没有解决。

例子:

    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())

4

1 回答 1

1

这称为“延迟加载”,是一种旨在减少内存开销的原则特性。

您可以将加载设置为“渴望”或显式为 DQL 中的其他字段添加选择以避免延迟加载:例如:

$objectsA=$em->createQueryBuilder('\Class\A', 'a')
             ->join('a.b', 'b')
             ->addSelect('b')
             ->getQuery()
             ->getResult();
于 2013-06-15T17:11:20.477 回答