2016-09-19 3 views
0

質問hasmany Answers。
回答hasmanyコメント。
コメントhasmany投票。
回答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

時刻の削除時にモデルでbootメソッドを使用できます。
すべてのリレーションシップモデルデータが削除されます。

質問モデルでは、回答、コメント、投票の関係関数が必要です。

さて、あなたはこれを使用することができます。、

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

のためにこれを使用
関連する問題