我不知道这是一个配置问题还是按照预期的方式工作,我没有正确使用它。但是当我向实体A发送包含实体B集合的PUT请求时,方法绑定尝试覆盖实体B的属性。
示例:
获取实体A:
{
id : 1,
name : "test",
collection : [
0 : { id : 2, name : "Entity B - 2", line : 0, property : "stuff" },
1 : { id : 3, name : "Entity B - 3", line : 1 }
]
}
PUT实体A :(从集合中删除了实体B id 2)
{
id : 1,
name : "test",
collection : [
0 : { id : 3, name : "Entity B - 3", line : 0 }
]
}
结果:
{
id : 1,
name : "test",
collection : [
0 : { id : 2, name : "Entity B - 3", line : 0, property : "stuff" }
]
}
配置:
EntityA
/**
* @ORM\OrderBy({"line" = "ASC"})
* @ORM\OneToMany(targetEntity="entityB", mappedBy="entityA", cascade= { "persist", "remove"})
*/
private $collection;
public function addCollection($entityB)
{
$this->collection[] = $entityB;
$lines->setEntityA($this);
return $this;
}
public function removeCollection($entityB)
{
$this->collection->removeElement($entityB);
$lines->setEntityA(null);
}
EntityB
/**
*
* @ORM\ManyToOne(targetEntity="entityA", inversedBy="collection")
*/
private $entityA;
控制器
$form = $this->createForm(new $entityAType(), $entity);
$form->bind($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->flush();
}
表格
->add('collection', 'collection', array(
"type" => new entityBType,
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false,
'cascade_validation' => true,
))
答案 0 :(得分:0)
我通过使用一个事件监听器来解决我的问题,该监听器将表格子项重新排序以匹配resquest的ID。