Symfony2 - Doctrine ArrayCollection方法返回为未定义



这很奇怪。我有一个实体,它可以包含其他相关实体的ArrayCollection。当我创建两个帮助器方法以允许我添加/检索单个实体的值时,我得到一个Symfony2异常,告诉我该方法未定义。我包含了名称空间,所以我不知道问题是什么。以下代码(由于保密协议,名称略有变化):

namespace AcmeMyBundleEntity;
use DoctrineORMMapping as ORM;
use DoctrineCommonCollectionsArrayCollection;
// ...
public function setThing($thing)
{
    $this->things->add($thing);
}
public function getThing()
{
    return $this->things->current();
}

真正奇怪的是它在current()而不是add()抛出异常:

fatalerrorexcexception: Error: Call to undefined method AcmeMyBundleEntityThing::current() in/home/kevin/www/project/vendor/Acme/my-bundle/Acme/MyBundle/Entity/myentity .php行106

从错误判断,看起来它没有将things视为ArrayCollection。有没有办法强迫things是一个ArrayCollection?我已经有了以下内容:

/**
 * @var ArrayCollection things
 *
 * @ORMOneToMany(targetEntity="Thing", mappedBy="other")
 */
private $things;

但我不知道还能做什么。

奇数。我可以通过检查它的底层类型来解决它:

public function getThing()
{
    if (get_type($this->things) === 'ArrayCollection') {
        return $this->things->current();
    } else {
        return $this->things;
    }
}

表单现在显示正确,没有例外。

如果有多个相关的实体,它可能会延迟分配一个ArrayCollection,如果只有一个,它就只是一个相关的实体?:耸耸肩:

你应该在你的实体构造函数中初始化ArrayCollection:

public function __construct()
{
     $this->things = new ArrayCollection;
}

否则你得到null而不是ArrayCollection的新实体

相关内容

  • 没有找到相关文章

最新更新