0

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

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 第 106 行中未定义的方法 Acme\MyBundle\Entity\Thing::current()

从错误来看,它似乎没有things被视为 ArrayCollection。有没有办法强制things成为 ArrayCollection?我已经有以下内容:

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

但我不确定还能做什么。

4

2 回答 2

0

奇怪的。我能够通过检查其基础类型来解决它:

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

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

如果有多个相关实体,它可能会延迟分配一个 ArrayCollection,如果只有一个,则将其保留为相关实体?:耸肩:

于 2013-06-11T18:45:56.977 回答
0

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

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

否则你会得到nullArrayCollection实体

于 2013-06-11T19:08:29.883 回答