从所有关系表中删除记录

时间:2016-09-19 07:53:51

标签: laravel laravel-5.2

问题有很多答案 答案很多评论 评论有很多投票 答案有很多投票。

现在,如果我删除一个问题,我想要问题及其答案,并删除所有答案的评论和投票。我所做的一切看起来并不那么优雅。

    $question=Question::where(['id'=>$request->id])->first();
    $answers=Answer::where(['q_id'=>$request->id])->get();
    foreach($answers as $answer)
    {
            $comments=Comment::where(['answer_id'=>$answer->id])->get();
            foreach($comments as $comment)
            {
                $votes=vote::where(['votable_id'=>$answer->id])
                            ->orWhere(['votable_id'=>$comment->id])
                            ->get();
                foreach($votes as $vote)
                {
                    $vote->delete();   
                }

                    $comment->delete();
             }

                $answer->delete();
   }
   $question->delete();

2 个答案:

答案 0 :(得分:0)

您可以使用Laravel的oberservers。因此,删除方法看起来像

public function deleting(Question $user)
{
    $question->answers()->delete();

    // Etc.
} 

我希望你明白这一点。

答案 1 :(得分:0)

您可以在删除时使用模型中的引导方法   它将删除所有关系模型数据。

在问题模型中,您需要关系函数来回答,评论和投票。

现在,你可以使用它。,

30

普通模仿的关系是,

    protected static function boot()
    {
       parent::boot();
       static::deleting(function ($question) {
        $question->answers()->delete();
        $question->comments()->delete();
        $question->votes()->delete();
       });
    }        

如果你像往常一样在控制器中删除问题,它也会删除答案,评论和投票。

    public function name()        
    {
      return $this->hasMany('App/name', 'fk_id', 'p_id');
    }        

对关系有任何疑问,请将其用于推荐laravel 5.2 relationship

相关问题