Maison >développement back-end >tutoriel php >Comment puis-je supprimer automatiquement les lignes associées lors de la suppression d'un modèle dans Laravel Eloquent ?

Comment puis-je supprimer automatiquement les lignes associées lors de la suppression d'un modèle dans Laravel Eloquent ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-14 11:05:10425parcourir

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

Implémenter la suppression automatique des lignes associées dans Laravel à l'aide d'Eloquent ORM

La méthode delete() standard d'Eloquent ORM supprime une seule ligne. Pour étendre cette fonctionnalité et supprimer automatiquement les lignes associées, utilisez les événements Eloquent.

Problème :
Lorsque vous supprimez une ligne avec $user->delete(), comment pouvez-vous la joindre un rappel automatique pour supprimer les lignes associées, comme $this->photo()->delete()?

Solution :

L'événement deleting est déclenché avant la suppression( ) la méthode est appelée. En définissant un gestionnaire d'événements dans la classe de modèle, vous pouvez effectuer des tâches de nettoyage lors de la suppression.

<?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();
        });
    }
}

Remarques supplémentaires :

  • Utilisation de la méthode démarrée pour déclarer les gestionnaires d'événements est recommandé.
  • Envisagez d'encapsuler les actions de nettoyage dans une transaction pour maintenir le référentiel intégrité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn