繁体   English   中英

Laravel 雄辩更新一对多关系

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM