Kontakt aufnehmen

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.

Laravel Entwickler gesucht?

Wir haben bereits viel Erfahrung im Umgang mit Laravel und Vue.js.
Nehmen Sie gerne unverbindlich Kontakt zu uns auf.

zum Angebot

Du arbeitest in einer Agentur oder als Freelancer?
Dann wirf doch mal einen Blick auf unsere Software FeatValue.

Über uns

Stefan Wienströer

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

Cookie-Einstellungen

Helfen Sie dabei, uns noch besser zu machen. Wir nutzen Cookies und ähnliche Technologien, um die Website auf Ihre Bedürfnisse anzupassen. Zur Datenschutzerklärung

Auswahl speichern