2016-09-19 97 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

相關問題