2017-02-12 4 views
0

Benutzer hat viele zu viele Beziehung mit Bericht. Und wenn ich einen Benutzer lösche, möchte ich alle seine Berichte und Daten aus der Pivot-Tabelle report_user löschen. Hier ist meine delete() Methode:Wie lösche ich Beziehungsmodelldaten zusammen mit Pivot-Tabellendaten in vielen zu vielen Relationen?

public function delete(Request $request) 
{ 
     $user=User::where('id',$request->id); 
     if($user) 
     { 
      $user->delete(); 
      return response()->json(['status'=>true]); 
     } 
} 

manuell kann ich den Benutzer löschen abrechnen:

foreach($user->reports as $report) 
{ 
    $report->delete(); 
} 

Wenn es eine bessere Möglichkeit ist verwandte Modelle zu löschen, würde ich gerne wissen.

+0

Abhängig von Ihrem Datenbankmodul können Sie auch Fremdschlüsseleinschränkungen in Ihrer Pivot-Tabelle mit CASCADE Action (ON DELETE CASCADE) verwenden. Dies funktioniert jedoch nicht mit Mysql und MyIsam. –

Antwort

1

Sie möchten wahrscheinlich die Benutzertabelle einrichten, um in Berichten auf einen Fremdschlüssel zu verweisen. Auf diese Weise können Sie die Methode ->onDelete('cascade') nutzen, wenn ein Benutzer gelöscht wird. See the documentation here

0

können Sie verwenden detach() Methode verwandte Modelle wie zu löschen:

public function delete(Request $request) 
{ 
     $user=User::where('id', $request->id); 
     if($user) 
     { 
      $user->delete(); 
      $user->reports()->detach(); 
      return response()->json(['status'=>true]); 
     } 
} 

Für weitere Informationen über detach():

$user->reports()->detach(); 

So Ihre vollständige Code wird so sein methode:

https://laravel.com/docs/master/eloquent-relationships

Verwandte Themen