Symfony2嵌入式表单,如何持久化对象
我正在尝试使用任务和标记实体One2Many实现(Symfony2,2.7) 要将对Task对象的引用保存到标记记录中,我只能通过以下方式定义Task的createAction():Symfony2嵌入式表单,如何持久化对象,symfony,Symfony,我正在尝试使用任务和标记实体One2Many实现(Symfony2,2.7) 要将对Task对象的引用保存到标记记录中,我只能通过以下方式定义Task的createAction(): 根据@Cerad comment,您唯一要做的就是持久化任务 由于关联映射中的cascade={“persist”},所有相关标记将自动持久化 您的代码应该是: if ($form->isValid()) { $em = $this->getDoctrine()->getManager()
根据@Cerad comment,您唯一要做的就是持久化
任务
由于关联映射中的cascade={“persist”}
,所有相关标记将自动持久化
您的代码应该是:
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($task);
$em->flush();
return $this->redirect($this->generateUrl('MyName_Task_show', array('id' => $task->getId())));
}
请参阅条令文档的和章节。不,您不需要遍历所有的
标记
并显式设置任务
,如果您正确配置它,Symfony将为您执行此操作
唯一需要添加的是在表单生成器中通过引用将设置为false
。在这种情况下,symfony将在每个标记上显式调用setTask
有关更多信息您只需坚持执行任务即可。cascade=persist将负责保留标记。谢谢。实际上,我有一个三层的工作/任务/标签情况。这有区别吗?我将尝试修复或提出另一个问题。只要您在关系上正确设置了cascade=persist,则只需一个persist即可。@Cerad,all,如果您发现问题,我很感激在开始新问题之前,您确实应该完成此问题。你有两个正确答案。真的应该接受一个或说明为什么不接受。这里不需要参考。他的setTag实现负责交叉引用。他也可以删除该行。不确定您所说的是哪一行,但$tag->setTask($this)行应该保留,这样可以更轻松地保持对象引用的同步。
class Task{
....
/**
*
* @ORM\OneToMany(targetEntity="Tag", mappedBy="Task", cascade={"persist"} )
*/
private $Tags;
....
/**
* Add tag
*
* @param \MyName\Bundle\BlogBundle\Entity\Tag $tag
*
* @return Task
*/
public function addTag(\MyName\Bundle\BlogBundle\Entity\Tag $tag)
{
$this->tags[] = $tag;
$tag->setTask($this);
return $this;
}
}
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($task);
$em->flush();
return $this->redirect($this->generateUrl('MyName_Task_show', array('id' => $task->getId())));
}