首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony2 -嵌入式窗体擦除子数据

Symfony2 -嵌入式窗体擦除子数据
EN

Stack Overflow用户
提问于 2013-04-15 14:55:17
回答 1查看 154关注 0票数 1

thisalso this的又一次延续

因此,我最初能够显示一个包含BlogPost及其相关注释的表单。问题是,如果我编辑一些BlogPost信息并保存,它就会删除我所有的评论,不管它们是否与该BlogPost相关。不太好。

我的大部分相关代码都在上面的第二个链接中,所以我不会在这里重复。不过,我将添加控制器和视图中的内容。

主计长:

代码语言:javascript
复制
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:

代码语言:javascript
复制
<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信息会删除任何评论,更不用说不属于那个帖子的评论了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-15 16:19:07

您正在使用cascade={"all"}处理CommentBlogPost之间的OneToMany关系。

您不需要手动对随博客发布的评论进行persist,这样您就可以从控制器中删除以下代码(在EditBlogAction()中):

代码语言:javascript
复制
foreach ($comments as $comment) {
  $em->persist($comment);
}

关于这一主题的理论文件:https://doctrine-orm.readthedocs.org/en/latest/reference/working-with-associations.html?highlight=Transitive%20Persistence#transitive-persistence-cascade-operations

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16018374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档