Laravel雄辩地更新了一对多的关系

时间:2015-04-17 09:49:31

标签: php laravel laravel-4

在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留在桌面上? 感谢

2 个答案:

答案 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); 

希望这有帮助。