Aller au contenu
Patrick Junod Patrick Junod

Utilisation des SoftDeletes sur vos modèles Eloquent Laravel

Dans cet article, nous allons voir comment utiliser la fonctionnalité soft deletes sur vos modèles Eloquent.
Laravel Programmation

Pour ceux qui ne savent pas ce que c'est, les soft deletes permettent de marquer un enregistrement comme "supprimé" sans le supprimer réellement de la base de données. Cela peut être utile dans de nombreux cas, par exemple lorsque vous avez des enregistrements que vous ne voulez pas supprimer définitivement, mais que vous voulez simplement cacher aux utilisateurs.

Pour utiliser les soft deletes sur vos modèles, vous devez d'abord ajouter le trait softDeletes à votre classe :

use Illuminate\Database\Eloquent\SoftDeletes;

class MonModel extends Eloquent
{
    use SoftDeletes;
}

Ensuite, vous devez ajouter une colonne de type "deleted_at" à votre table. Vous pouvez le faire en ajoutant simplement la date colonne suivante à votre migration :

$table->dateTime('deleted_at')->nullable();

//Ou en utilisant la fonction proposée par Laravel:

$table->softDeletes();

Une fois que vous avez ajouté la colonne, vous pouvez commencer à utiliser la fonctionnalité soft deletes. Pour "supprimer" un enregistrement, vous pouvez appeler la méthode delete() :

$monModel->delete();

Cela va mettre à jour la colonne "deleted_at" avec la date et l'heure actuelles, ce qui marquera l'enregistrement comme "supprimé".

Vous pouvez ensuite utiliser la méthode withTrashed() pour récupérer les enregistrements supprimés :

$models = MonModel::withTrashed()->get();

foreach ($models as $model) {
    if ($model->trashed()) {
        // l'enregistrement est supprimé
    } else {
        // l'enregistrement n'est pas supprimé
    }
}

Vous pouvez également utiliser la méthode onlyTrashed() pour récupérer uniquement les enregistrements supprimés :

$models = MonModel::onlyTrashed()->get();

foreach ($models as $model) {
    // tous les enregistrements qui sont supprimés
}

Pour "restaurer" un enregistrement supprimé, vous pouvez appeler la méthode restore() :

$monModel->restore();

Cela va mettre à jour la colonne "deleted_at" avec une valeur null, ce qui marquera l'enregistrement comme "non supprimé".

Il existe également une méthode forceDelete() qui supprime définitivement un enregistrement, même s'il est marqué comme "supprimé" :

$monModel->forceDelete();

Voilà, vous savez maintenant comment utiliser les soft deletes avec Eloquent !