这是我的问题:我创建了一个对象,然后从该对象中获取了一个集合。对于某些对象,在某些控制器中,此集合返回一个空的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 -.-
希望你们能指出我正确的方向,我真的不想通过我所有的实体为他们创建一个构造函数,因为这个!
此外,最令人讨厌的是这种非确定性行为,其中会返回集合。
答案 0 :(得分:1)
这就是文档为什么说all collections should be initialized:
的原因<?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;
}
}
时间,如果集合为null或不为null,如果没有初始化则是威慑性的。如果没有初始化,$groups
字段只包含Doctrine\Common\Collections\Collection
的实例,如果用户是从Doctrine中检索的,但是在您实例化用户的新实例后却没有。当您的用户实体仍然是新的$groups
时,显然会为空。