我正在尝试更新特定实体(主实体)的实体集合(子实体)的位置。一切正常,直到方法执行刷新指令以将更新推送到数据库。
错误消息是:
Catchable Fatal Error: Argument 1 passed to Doctrine\Common\Collections\ArrayCollection::__construct() must be an array, object given, called in \vendor\doctrine\lib\Doctrine\ORM\UnitOfWork.php on line 426 and defined in \vendor\doctrine-common\lib\Doctrine\Common\Collections\ArrayCollection.php line 46
控制器方法是:
public function layoutAction($id, $entity, $subentity)
{
//-- Get Repository for master entity class
$object = $this->getRepository($entity)->find($id);
$em = $this->getDoctrine()->getEntityManager();
//-- Get form datas
$datas = $this->get('request')->get('items', array());
//-- Update position for each msater entity childs of given subentity
$method = "get" . ucfirst($subentity) . "s";
foreach($object->$method() as $item){
$item->setPosition(array_search($item->getId(), $datas));
$em->persist($item);
}
//-- Push updates
$em->flush();
//-- Notification + Redirection
...
}
主实体与子实体具有一对多的关系,子实体与主实体具有一对一的关系。样品声明如下:
主体实体:
<one-to-many field="subentities" target-entity="Subentity" mapped-by="masterentity" />
Subentity:
<one-to-one field="masterentity" target-entity="MasterEntity" inversed-by="subentities">
<join-column name="idMaster" referenced-column-name="idMaster" />
</one-to-one>
我不明白为什么会触发这个错误,但我相信它来自于关系。
答案 0 :(得分:0)
您的地图令人困惑。如果您定义一个 Masterentity有多个子实体,那么对于Subentity::masterentity
,您应该设置反向关系:多对一而不是一对之一。