从laravel控制器中删除嵌套的注释和相关数据

时间:2019-04-08 06:44:18

标签: laravel foreach

在laravel中使用parent_id实现了五个嵌套注释,还有另一个表票用于存储相关数据。

我在comments模型中定义了hasMany关系。现在,当我删除评论时,它也应该删除所有回复和投票。

要删除我使用的投票

$review->votes()->delete(); 

效果很好。但是我坚持删除嵌套答复的投票。

如果我使用foreach循环,如何在所有动态级别中循环。

public function deletereview($id=null){

    $review = Review::find($id);

    foreach($review->replies as $reply){
        $reply->votes()->delete();
        //how to do this for all levels?
        $reply = $reply->votes(); // this doesn't work
    }
    return back();
}

请提供正确的操作方法建议。

注意:我已经阅读了迁移中的层叠选项,但是对于嵌套注释(答复及其相关数据的答复)没有任何解释。

谢谢 -维杰

2 个答案:

答案 0 :(得分:1)

<section id="section_music" class="section-padding">
    <div class="section">
        <div class="container mb-4">

答案 1 :(得分:0)

我建议为此使用观察器。

https://laravel.com/docs/5.8/eloquent#observers

public function deleted(Review $review)
{
    foreach($review->replies as $reply){
    $votes = $reply->votes;
    Votes::destroy($votes)
}

销毁方法允许您删除多个模型。 对于任何下一级别,在这种情况下,您都必须使用另一个foreach循环。

$ reply = $ reply-> votes();无法使用,因为您应该使用

$votes = $reply->votes;
//or
$votes = $reply->votes()->get();