2016-09-19 78 views
0

问题hasmany答案。
解决方法hasmany评论。
评论hasmany Votes。
答案hasmany票数。删除所有关系表中的记录

现在,如果我删除了一个问题,我想问题以及它的答案,并且所有评论和答案上的投票都将被删除。我做了什么看起来不那么优雅。

$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(); 

回答

0

您可以使用Laravel的oberservers这个。所以,你的删除方法可能看起来像

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

    // Etc. 
} 

我希望你的想法。

0

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

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

现在,你可以使用这个,

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'); 
    }   

如果控制器照常您删除的问题,它会删除答案,评论和投票也。

$question = Question::all()->delete(); 

中关系的任何问题,用这个参考laravel 5.2 relationship