【发布时间】:2013-01-07 20:04:19
【问题描述】:
我的实体如下所示(仅粘贴相关部分):
用户.php
/**
* @ManyToMany(targetEntity="Startup", inversedBy="members", cascade={"persist"})
* @OrderBy({"name"="ASC"})
* @var Startup[]
*/
private $startups;
public function __construct($data = array())
{
$this->startups = new ArrayCollection();
$this->joined = new DateTime("now");
parent::__construct($data);
}
启动.php
/**
* @ManyToOne(targetEntity="User", cascade={"persist"})
* @var User
*/
private $founder = null;
/**
* @ManyToMany(targetEntity="User", mappedBy="startups", cascade={"persist"})
* @OrderBy({"lastName" = "ASC"})
* @var User[]
*/
private $members;
public function __construct($data = array())
{
$this->files = new ArrayCollection();
$this->topics = new ArrayCollection();
$this->members = new ArrayCollection();
$this->founded = new DateTime("now");
parent::__construct($data);
}
现在我正在运行这段代码($this->identity instanceof User,$values 只是一些用字符串填充的结构,$this->model 是 EntityManager):
$startup = new Startup();
$startup->name = $values->name;
$startup->founder = $this->identity;
$this->model->persist($startup);
$this->identity->startups[] = $startup;
$this->model->flush();
我明白了:
参数 1 传递给 Doctrine\ORM\UnitOfWork::getCollectionPersister() 必须是一个数组,给定null,调用 .../libs/Doctrine/ORM/UnitOfWork.php 在第 332 行并定义
显然是在刷新时触发的。我做错了什么?
【问题讨论】:
-
您是否尝试过在构造函数中使用
$data = array()而不是$data = null? -
那不是问题,我已经解决了,我已经从帖子中删除了它以使其更清楚。
if($data == null) $data = array();在我使用$data之前。但这实际上是个好点,我不知道为什么我使用null作为默认值。 -
您是否能够:1. 提供更好的堆栈跟踪(完成一个,最终使用传入的参数) 2. 告诉我们为什么您的模型具有持久性方法?
-
调用堆栈现在有问题了。 Model 只是帮助器类,可以更轻松地访问存储库和 EM 核心方法。
-
@ZdeněkTopič 您现在可以尝试运行模式工具验证吗?这是一个 CLI 工具。不确定它是否与 Nette 集成。
标签: php doctrine doctrine-orm