在laravel中,我已正确设置了一对多关系,我可以使用saveMany函数保存关系。
$post->comment()->saveMany($array);
问题是:
Laravel如何自动删除未使用的注释,并仅将最新注释存储到数据库?
例如。 第一次,
ID 1 Post has ID 1, ID2, ID 3 comment.
但是,当我稍后更新关系时,
ID 1 Post only has ID 2, ID 3 comment
laravel如何自动删除ID 1 comments
?然后将ID 2, 3
留在桌面上?
感谢
答案 0 :(得分:0)
使用saveMany(),您可以附加新实体并自动将外键设置为父项(在存储时设置$comment->post_id = $post->id;
)。这仅用于附加它们,因为您声明注释始终与帖子相关。一对多定义您的帖子有很多评论,评论属于帖子,由评论中的post_id定义。
除非您想要发表与帖子无关的评论,这没有任何意义,我会说您不应该从评论中取消设置post_id,而只是删除评论,如果您想要删除它们。
但是,如果您这样做,请尝试$comment->dissociate()
,这将取消设置父键。这就像在许多人中使用detach()
一样。
答案 1 :(得分:0)
对于多对多关系没有detach()方法,但你可以做到
// detach old first
$post->comment()->get()->each(function($comment) use ($array){
if (!in_array($comment, $array))
// if (!$array->contains($comment)) in case of collection
{
$comment->post_id = null;
$comment->save();
}
});
// attach new ones
$post->comment()->saveMany($array);
希望这有帮助。