Heim > PHP-Framework > Laravel > Hauptteil

So fügen Sie eine automatische Datenlöschfunktion in Laravel hinzu

PHPz
Freigeben: 2023-04-23 15:57:53
Original
820 Leute haben es durchsucht

Mit der kontinuierlichen Entwicklung von Internetanwendungen entstehen auch immer mehr Webentwicklungs-Frameworks. Unter ihnen ist Laravel eines der beliebtesten PHP-Entwicklungsframeworks und wird in allen Lebensbereichen häufig verwendet. In diesem Artikel wird vorgestellt, wie man in Laravel eine automatische Datenlöschfunktion hinzufügt.

1. Problemhintergrund

Bei der Entwicklung von Webanwendungen müssen wir möglicherweise regelmäßig einige nutzlose Daten löschen, um Speicherplatz freizugeben und die Systemeffizienz zu verbessern. Beispielsweise müssen wir Benutzerregistrierungen, aber nicht aktivierte Konten nach einem bestimmten Zeitraum löschen oder einige abgelaufene Sitzungsinformationen usw. löschen.

Damit Daten regelmäßig gelöscht werden müssen, können wir manuell geplante Aufgaben schreiben, um Datenlöschvorgänge zu bestimmten Zeitpunkten durchzuführen. Beim manuellen Schreiben geplanter Aufgaben treten jedoch folgende Probleme auf:

  1. Das Zeitmanagement ist unpraktisch und Löschvorgänge müssen von Zeit zu Zeit manuell durchgeführt werden.
  2. Es ist fehleranfällig, insbesondere wenn mehrere zusammengehörige Tabellen gleichzeitig gelöscht werden müssen. Die manuelle Ausführung ist anfällig für logische Fehler.

Zu diesem Zweck müssen wir einen Mechanismus zum automatischen Löschen von Daten entwickeln, um den Prozess der Datenlöschung zu vereinfachen und die Möglichkeit von Fehlern zu verringern.

2. Der automatische Löschmechanismus von Laravel

In Laravel können wir den Effekt des automatischen Löschens von Daten durch den von Eloquent ORM bereitgestellten Mechanismus zum „sanften Löschen“ erzielen. Vorläufiges Löschen bedeutet, dass wir beim Löschen einer Datenzeile in der Datenbank diese nicht direkt löschen, sondern das Feld delete_at der Datenzeile auf einen nicht leeren Zeitstempelwert setzen.

Durch die Verwendung des Soft-Deletion-Mechanismus im Laravel-Modell können wir die folgenden Funktionen erreichen:

  1. Wenn wir die Methode delete() aufrufen, um einen Datensatz zu löschen, wird dem Feld delete_at des Datensatzes automatisch ein Zeitstempelwert zugewiesen
  2. Wenn wir die Methode „restore()“ aufrufen, um einen Datensatz wiederherzustellen, wird der ursprüngliche Feldwert „deleted_at“ des Datensatzes gelöscht.
  3. Wenn wir die Methode „forceDelete()“ aufrufen, um einen Datensatz dauerhaft zu löschen, wird der Feldwert „deleted_at“ des Datensatzes gelöscht gelöscht werden, funktioniert nicht.

Es ist ersichtlich, dass der Soft-Deletion-Mechanismus historisch gelöschte Daten problemlos wiederherstellen kann, wodurch gelöschte Datensätze effektiv ausgeblendet werden, ohne die Integrität der Datenbank zu beeinträchtigen.

3. Schritte zum automatischen Löschen von Daten

In Laravel können wir Artisan-Befehle verwenden, um Daten regelmäßig zu löschen. Die spezifische Implementierungsmethode lautet wie folgt:

  1. Erstellen Sie eine Konsolenbefehlsklasse.

Zuerst erstellen wir eine Befehlsklasse im appConsoleCommands-Verzeichnis und erben die IlluminateConsoleCommand-Klasse. Während des Entwicklungsprozesses können wir diese Klasse entsprechend unseren eigenen Bedürfnissen modifizieren und erweitern.

  1. Schreiben Sie eine Methode zum automatischen Löschen von Daten

In der CustomDeleteCommand-Klasse müssen wir eine Methode namens delete() schreiben und die Logik der Daten implementieren, die automatisch gelöscht werden müssen. Zum Beispiel:

/**
 * Execute the console command.
 *
 * @return void
 */
public function handle()
{
    $now = now(); //当前时间
    $expiredTime = $now->subDay(7); //过期时间为一周前

    //删除users表中deleted_at字段大于$expiredTime的记录
    DB::table('users')
        ->where('deleted_at', '<&#39;, $expiredTime)
        ->delete();

    //删除posts表及其关联的comments表中deleted_at字段大于$expiredTime的记录
    Post::whereHas('comments', function ($query) use ($expiredTime) {
        $query->where('deleted_at', '<&#39;, $expiredTime);
    })->where('deleted_at', '<&#39;, $expiredTime)->delete();
}
Nach dem Login kopieren

Im obigen Code definieren wir eine Ablaufzeit $expiredTime und verwenden dann Laravel's DB und Eloquent ORM, um übereinstimmende Datensätze in den Benutzer- und Beitragstabellen zu löschen.

Es ist zu beachten, dass wir die Methode whereHas() von Eloquent ORM verwendet haben, um geeignete Datensätze in der Beitragstabelle und der zugehörigen Kommentartabelle zu löschen.

  1. Registrieren Sie einen Befehl zum automatischen Löschen von Daten

Abschließend müssen wir den Befehl CustomDeleteCommand in der Befehlsliste von Artisan registrieren, damit wir den Befehl im Terminal ausführen können.

Wir können diesen Befehl in der Schedule-Methode in der Datei appConsoleKernel.php registrieren. Zum Beispiel:

protected function schedule(Schedule $schedule)
{
    $schedule->command('delete:data')->daily();
}
Nach dem Login kopieren

Der obige Code implementiert die Funktion, CustomDeleteCommand jeden Tag automatisch auszuführen. Wir können diese Methode auch nach Bedarf ändern, um eine benutzerdefinierte geplante Datenlöschfunktion zu implementieren.

4. Zusammenfassung

In diesem Artikel wird die Methode zum automatischen Löschen von Daten in Laravel vorgestellt. Durch die Verwendung des Soft-Deletion-Mechanismus von Eloquent ORM können wir nutzlose Daten innerhalb eines bestimmten Zeitraums problemlos automatisch löschen, wodurch der Druck beim manuellen Löschen von Daten verringert und die Effizienz von Webanwendungen verbessert wird.

In der tatsächlichen Entwicklung können wir diese Methode nach Bedarf ändern und erweitern, um unterschiedliche Geschäftsanforderungen zu erfüllen. Ich hoffe, dieser Artikel ist für Laravel-Entwickler hilfreich.

Das obige ist der detaillierte Inhalt vonSo fügen Sie eine automatische Datenlöschfunktion in Laravel hinzu. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage