[英]Laravel eloquent update one-many relationship
在 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
留在表中? 谢谢
使用 saveMany() 附加新实体并自动将外键设置为父实体(设置$comment->post_id = $post->id;
存储它们时)。 这只是为了附加它们,因为您声明评论始终与帖子相关。 一对多定义你的帖子有很多条评论,一个评论属于帖子,由评论中的post_id定义。
除非你想有与帖子无关的评论,这是没有意义的,我会说你不应该从评论中取消设置 post_id,但如果你想摆脱它们,只需删除评论。 但是,如果您这样做,请尝试$comment->dissociate()
,它会取消设置父键。 这就像在多对多上使用detach()
一样。
没有像多对多关系那样的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);
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.