如何持久化与已经存在的实体相关的实体?

时间:2018-10-10 12:24:25

标签: php symfony doctrine

我已经看到了很多关于将理论级联的示例(包括文档),但是每个示例都是关于创建例如新用户,新注释并保存两者的示例。

在我的情况下,帖子和用户已经存在,而不是评论。

这些类如下所示: enter image description here

我的问题如下:使用这种复杂方案,当现有用户保存对现有帖子的评论时,应保留/合并哪个实体,并按哪个顺序?

我不想要代码,只是解释它如何工作,这就是为什么我不包含代码的原因。谢谢。

2 个答案:

答案 0 :(得分:1)

在这种情况下,级联并没有真正帮助您,因为我想象您有一个独立的(非嵌入式)CommentType表单。因此,您需要在控制器中保留一个Comment对象,该对象必须与现有的UserPost实体相关联。

如果您有一个PostType表单(例如带有一个嵌入式CommentType表单(通过comment字段)并且您想同时保存(或更新)两个{ {1}}和一个Post实体。

我建议您在Comment表单中添加一个post_id字段,并像Symfony文档建议的那样使用DataTransformer,建议hereCommentType转换为{{1} } 实体。最后,您要做的就是在您的控制器中明确设置您的用户:

post_id

答案 1 :(得分:0)

您只需要设置AuthorPost,然后persist新注释:

$comment->setAuthor($yourAuthor)
        ->setPost($yourPost);
$em->persist($comment);
$em->flush();

在这里,我没有过多注意Answers [],因为您没有解释这种关系。但是,如果Answer是另一个Comment,并且如果Comment只能是另一个Answer的{​​{1}},那么您可能需要添加一个{{1} }字段,它将是一个Comment,本质上是一个外键,因此Answers []中的所有注释都将具有Replied字段,即Replied,其Answered []包含另一个{{1 }}。