„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Filament: Anhänge beim Löschen eines Datensatzes löschen

Filament: Anhänge beim Löschen eines Datensatzes löschen

Veröffentlicht am 08.11.2024
Durchsuche:192

Filament: Delete Attachments when Deleting a Record

Filament ermöglicht Ihnen das Hinzufügen von Anhängen zu einem Datensatz, löscht diese jedoch nicht, wenn Sie den Datensatz löschen.

Um dieses Problem zu lösen, haben wir zwei Alternativen:

Hören Sie sich das Löschereignis des Modells an

Wenn ein Modell gelöscht werden soll, wird das Löschereignis ausgelöst. Wir können dieses Ereignis abhören, um die Funktion auszulösen, die dafür verantwortlich ist, alle Anhänge zu löschen, bevor das Modell nicht mehr existiert.

Innerhalb der Modellklasse können wir die Booted-Methode hinzufügen, um neue Ereignis-Listener im Modell zu registrieren.

class Project extends Model
{
    protected $fillable = [
        'title', 'slug', 'repository', 'description', 'thumbnail',
    ];

    /**
     * The "booted" method of the model.
     */
    protected static function booted(): void
    {
        static::deleting(function ($project) {
            Storage::disk('public')->delete($project->thumbnail);
        });
    }
}

Dieser Code löscht den Miniaturbild-Anhang, bevor das Modell gelöscht wird.

Weitere Informationen hierzu finden Sie in der Laravel-Dokumentation https://laravel.com/docs/11.x/eloquent#events-using-closures

Ändern Sie die Löschaktion von Filament

Eine weitere Möglichkeit besteht darin, das Verhalten der Löschaktion zu ändern.

protected function getActions(): array
{
    return [
        Actions\DeleteAction::make()
            ->after(function (Project $project) {
                // delete single
                if ($project->thumbnail) {
                    Storage::disk('public')->delete($project->thumbnail);
                }
            })
    ];
}

Sie können die Option verwenden, die Ihren Anforderungen besser entspricht. Beachten Sie jedoch, dass durch das Hinzufügen eines Ereignis-Listeners der Anhang gelöscht wird, wenn Ihr Modell gelöscht wird, wann immer dies durch eine Filament-Aktion oder einen anderen Teil des Codes in Ihrer App erfolgt ist.

Dies ist wichtig, da es wahrscheinlich darüber entscheidet, welche Option Sie wählen sollten.

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/sertxudev/filament-delete-attachments-when-deleting-a-record-1jhl?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3