学说集合在对象初始化时为空[仅在某些情况下]


Doctrine collection is null upon object initialization [In some cases only]

这是我的问题:我创建了一个对象,然后从该对象获得一个集合。对于一些对象,在一些控制器中,这个集合返回一个空的CollectionArray对象,对于一些它只是返回null。

在SO中阅读,他们说最好总是在实体构造函数中初始化所有ManyToMany关系,这是真的吗?这些记录在哪里?

这是一个问题的例子:

$p = new Person();
$p->getRelatives(); // null, should be empty CollectionArray.

同时,在另一个控制器类中…

$w = new Woman();
w->getMen(); // this returns an empty CollectionArray class -.-

希望你们能指出我在正确的方向,我真的不想通过我所有的实体,并为他们创建一个构造函数,只是因为这个!

除此之外,真正令人讨厌的是返回集合的这种不确定性行为。

这就是为什么文档中说,所有集合都应该初始化的原因:

<?php
use Doctrine'Common'Collections'ArrayCollection;
/** @Entity */
class User
{
    /** @ManyToMany(targetEntity="Group") */
    private $groups;
    public function __construct()
    {
        $this->groups = new ArrayCollection();
    }
    public function getGroups()
    {
        return $this->groups;
    }
}

如果集合为空或不为空,如果未初始化,则时间是确定性的。没有初始化的$groups字段只包含Doctrine'Common'Collections'Collection的实例,如果用户是从学说检索,但不是在您实例化了用户的新实例之后。当你的用户实体还是新的时候,$groups显然是空的。