这很奇怪。我有一个实体可以包含其他相关实体的ArrayCollection。当我创建一些辅助方法来允许我添加/检索单个实体的值时,我得到一个Symfony2异常,告诉我方法没有定义。我包括命名空间,所以我不知道问题是什么。代码(名称由于NDA而略有变化)如下:
namespace Acme\MyBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
// ...
public function setThing($thing)
{
$this->things->add($thing);
}
public function getThing()
{
return $this->things->current();
}
真正奇怪的是它在current()
而不是add()
抛出异常:
FatalErrorException:错误:在/home/kevin/www/project/vendor/acme/my-bundle/Acme/MyBundle/Entity/MyEntity.php中调用未定义的方法Acme \ MyBundle \ Entity \ Thing :: current()第106行
根据错误判断,它似乎没有将things
视为ArrayCollection。有没有办法强制things
成为ArrayCollection?我已经有了以下内容:
/**
* @var ArrayCollection things
*
* @ORM\OneToMany(targetEntity="Thing", mappedBy="other")
*/
private $things;
但我不确定还能做什么。
答案 0 :(得分:0)
奇。我能够通过检查它的基础类型来解决它:
public function getThing()
{
if (get_type($this->things) === 'ArrayCollection') {
return $this->things->current();
} else {
return $this->things;
}
}
表单现在正确显示,没有例外。
如果有多个相关实体,可能它会延迟分配一个ArrayCollection,如果只有一个相关实体就将其保留为相关实体? :耸肩:
答案 1 :(得分:0)
您应该在实体构造函数中初始化ArrayCollection:
public function __construct()
{
$this->things = new ArrayCollection;
}
否则您获得null
代替ArrayCollection
新实体