这是我的问题:我创建了一个对象,然后从该对象获得一个集合。对于一些对象,在一些控制器中,这个集合返回一个空的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
显然是空的。