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

时间:2014-06-07 16:09:58

标签: php symfony collections doctrine-orm

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

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

此外,最令人讨厌的是这种非确定性行为,其中会返回集合。

1 个答案:

答案 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时,显然会为空。