Laravel Soft Deletes
Manchmal macht es Sinn, Datenbank-Einträge nicht direkt zu löschen sondern als gelöscht zu markieren. So hat man die Möglichkeit, einen bereits gelöschten Eintrag später wiederherzustellen. Das Grundprinzip entspricht in etwa der bekannten Papierkorb-Funktion in Betriebssystem-Oberflächen wie bei Windows, MacOs etc..
Auch das bietet Laravel out-of-the-box. In nur zwei Schritten lassen sich die sogenannten softDeletes für eine Datenbank-Tabelle aktivieren. Voraussetzung ist nur, dass Eloquent genutzt wird.
Schritt 1: Migration erstellen
In der up-Funktion der entsprechenden migration muss die Zeile $table->softDeletes();
hinzugefügt werden.
Beim Ausführen der Migrations wird dann eine neue Spalte „deleted_at“ angelegt.
public function up() { Schema::create('my_model', function (Blueprint $table) { $table->bigIncrements('id'); $table->softDeletes(); $table->timestamps(); }); }
Schritt 2: Model-Klasse erweitern
In der Model-Klasse unserer Tabelle müssen wir angeben, dass wir den SoftDeletes
Trait nutzen wollen.
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; class MyModel extends Model { use SoftDeletes; }
SoftDeletes im Einsatz
Von jetzt an werden Einträge, die per ->delete()
-Funktion gelöscht werden, nicht mehr aus der Datenbank entfernt, sondern lediglich als gelöscht (deleted_at
) markiert.
Allerdings werden sie bei Abfragen, die über Eloquent laufen auch nicht mehr mit ausgegeben, so dass wir sie als „quasi gelöscht“ ansehen können.
Achtung: Bei Datenbank-Abfragen, die nicht über Eloquent laufen, werden die Einträge natürlich immer noch ausgeliefert.
SoftDeletes Einträge abfragen
Fall soft deleted Objekte bei Eloquent-Abfragen mit abgefragt werden sollen, kann man die entsprechende Abfrage mit ->withThrashed()
ergänzen.
Falls ausschließlich gelöschte Objekte abgefragt werden sollen, geht das analog dazu über ->onlyTrashed()
.
Einträge wiederherstellen
Ein per softDeletes gelöschtes Objekt kann mit ->restore()
wiederhergestellt werden.
Einträge endgültig löschen
Wenn ein Eintrag nun aber endgültig aus der Datenbank gelöscht werden soll, kann die ->forceDelete()
auf dem Objekt verwendet werden.
Du arbeitest in einer Agentur oder als Freelancer?
Dann wirf doch mal einen Blick auf unsere Software FeatValue.
Über uns

Wir entwickeln Webanwendungen mit viel Leidenschaft. Unser Wissen geben wir dabei gerne weiter. Mehr über a coding project