因此,我最初能够显示一个包含BlogPost及其相关注释的表单。问题是,如果我编辑一些BlogPost信息并保存,它就会删除我所有的评论,不管它们是否与该BlogPost相关。不太好。
我的大部分相关代码都在上面的第二个链接中,所以我不会在这里重复。不过,我将添加控制器和视图中的内容。
主计长:
public function EditBlogAction($id)
{
$request = $this->get('request');
$em = $this->get('doctrine')->getManager();
$blogPost = $em->getRepository('Acme\SiteBundle\Entity\BlogPost')->find($id);
$comments = $blogPost->getComments();
$form = $this->createForm(new BlogPostType(), $blogPost);
if ($request->getMethod() == 'POST') {
$form->bind($request);
foreach ($comments as $comment) {
$em->persist($comment);
}
$em->persist($blogPost);
$em->flush();
$em->clear();
}
return $this->render('SiteBundle:Site:editblog.html.twig',array('blogpost' => $blogPost, 'form' => $form->createView()));
}editblog.html.twig:
<form action='{{ path('_admin_blog_edit', { 'id':blogpost.getId }) }}' method='post' enctype="multipart/form-data">
{{ form_widget(form.title) }}
{# other blog post fields #}
{% for comment in form.comments %}
{{ comment.commentBody }}
{% endfor %}
<input type="submit" />我不明白为什么保存BlogPost信息会删除任何评论,更不用说不属于那个帖子的评论了。
发布于 2013-04-15 16:19:07
您正在使用cascade={"all"}处理Comment和BlogPost之间的OneToMany关系。
您不需要手动对随博客发布的评论进行persist,这样您就可以从控制器中删除以下代码(在EditBlogAction()中):
foreach ($comments as $comment) {
$em->persist($comment);
}https://stackoverflow.com/questions/16018374
复制相似问题