Heim >Backend-Entwicklung >PHP-Tutorial >Wie kann ich verwandte Zeilen automatisch löschen, wenn ich ein Modell in Laravel Eloquent lösche?

Wie kann ich verwandte Zeilen automatisch löschen, wenn ich ein Modell in Laravel Eloquent lösche?

Barbara Streisand
Barbara StreisandOriginal
2024-12-14 11:05:10425Durchsuche

How Can I Automatically Delete Related Rows When Deleting a Model in Laravel Eloquent?

Automatisches Löschen verwandter Zeilen in Laravel mit Eloquent ORM implementieren

Die Standardmethode delete() von Eloquent ORM löscht eine einzelne Zeile. Um diese Funktionalität zu erweitern und verwandte Zeilen automatisch zu löschen, verwenden Sie Eloquent-Ereignisse.

Problem:
Wie können Sie eine Zeile anhängen, wenn Sie sie mit $user->delete() löschen? ein automatischer Rückruf zum Löschen verwandter Zeilen, z $this->photo()->delete()?

Lösung:

Das Ereignis löschen wird vor dem Löschen ausgelöst( )-Methode aufgerufen wird. Durch Definieren eines Ereignishandlers innerhalb der Modellklasse können Sie beim Löschen Bereinigungsaufgaben ausführen.

<?php

namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    public function photos()
    {
        return $this->has_many('Photo');
    }
    
    // This method is called before delete() is called
    protected static function booted () {
        static::deleting(function (User $user) {
            $user->photos()->delete();
        });
    }
}

Zusätzliche Hinweise:

  • Verwenden Sie die Booted-Methode, um Es wird empfohlen, Ereignishandler zu deklarieren.
  • Erwägen Sie, die Bereinigungsaktionen in eine Transaktion einzuschließen, um die Referenzierung aufrechtzuerhalten Integrität.

Das obige ist der detaillierte Inhalt vonWie kann ich verwandte Zeilen automatisch löschen, wenn ich ein Modell in Laravel Eloquent lösche?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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