2016-08-30 1 views
0

Ich habe eine Website, wo Benutzer Beiträge und Nachrichten erstellen können. Ich möchte es so, dass, wenn ein Benutzer sein Profil löscht, alle Posts und Nachrichten aller Benutzer ebenfalls gelöscht werden. Ich habe eine Tabelle mit Benutzern, Nachrichten und Posts. Ich war nur etwas zu tun, wieLöschen von Benutzer und Benutzer erstellte Daten in Laravel 5

User::destroy(Auth->user()->id); //to delete user 
Message::where(user_id, Auth->user())->delete(); //to delete al messages from that user 
Post::where(user_id, Auth->user())->delete(); //to delete all posts from that user 

Denken ist dies der beste Weg, oder ist es eine elegantere Möglichkeit? Muss ich grundsätzlich alle meine Tabellen nach dieser user_id durchsuchen und dann jede Zeile löschen?

+0

Ja, ist es der DB [Auslöser] genannt (https://www.google.com/search?client=opera&q=DB+triggers&sourceid=opera&ie=UTF-8&oe=UTF-8) oder speichern Sie Prozeduren. – MaxZoom

Antwort

2

Dazu müssen Sie bei der Migration Fremdschlüsseleinschränkungen mit einer onDelete-Methode einrichten.

Dies würde in Ihrer Posts Tabelle leben.

$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); 

Dies würde in Ihrer Nachrichtentabelle leben.

$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); 

Überprüfen Sie die Fremdschlüssel Einschränkungen auf diesem. https://laravel.com/docs/5.3/migrations#foreign-key-constraints

Die andere Option, wenn Sie Ihre Migrationen aus irgendeinem Grund nicht ändern können, ist, Trigger zu tun.

protected static function boot() { 
    parent::boot(); 

    static::deleting(function($user) { 
     $user->posts()->delete(); 
     $user->messages()->delete(); 
    }); 
} 

Dies erfordert natürlich, dass Sie Beziehungen in Ihren Modellen eingerichtet haben.

ref: https://laravel.com/docs/5.3/eloquent#events

Verwandte Themen