Maison  >  Article  >  cadre php  >  Comment ajouter une fonction de suppression automatique des données dans Laravel

Comment ajouter une fonction de suppression automatique des données dans Laravel

PHPz
PHPzoriginal
2023-04-23 10:21:49818parcourir

Avec le développement continu des applications Internet, les frameworks de développement Web émergent également à l'infini. Parmi eux, Laravel est l’un des frameworks de développement PHP les plus populaires et est largement utilisé dans tous les horizons. Cet article explique comment ajouter une fonction de suppression automatique des données dans Laravel.

1. Contexte du problème

Lors du développement d'applications Web, nous pouvons être amenés à supprimer régulièrement certaines données inutiles pour libérer de l'espace et améliorer l'efficacité du système. Par exemple, nous devons supprimer les enregistrements d'utilisateurs mais les comptes non activés après une certaine période, ou supprimer certaines informations de session expirées, etc.

Pour ce besoin de supprimer régulièrement des données, nous pouvons écrire manuellement des tâches planifiées pour effectuer des opérations de suppression de données à des moments précis. Cependant, l'écriture manuelle des tâches planifiées présente les problèmes suivants :

  1. La gestion du temps n'est pas pratique et les opérations de suppression doivent être effectuées manuellement de temps en temps.
  2. Il est sujet aux erreurs, en particulier lorsque plusieurs tables liées doivent être supprimées en même temps. L'exécution manuelle est sujette aux erreurs logiques.

À cette fin, nous devons développer un mécanisme de suppression automatique des données afin de simplifier le processus de suppression des données et de réduire le risque d'erreurs.

2. Le mécanisme de suppression automatique de Laravel

Dans Laravel, nous pouvons obtenir l'effet de suppression automatique des données grâce au mécanisme de « suppression logicielle » fourni par Eloquent ORM. La suppression logicielle signifie que lorsque nous supprimons une ligne de données dans la base de données, nous ne la supprimons pas directement, mais définissons le champ delete_at de la ligne de données sur une valeur d'horodatage non vide.

En utilisant le mécanisme de suppression logicielle dans le modèle de Laravel, nous pouvons réaliser les fonctions suivantes :

  1. Lorsque nous appelons la méthode delete() pour supprimer un enregistrement, le champ delete_at de l'enregistrement se verra automatiquement attribuer une valeur d'horodatage ;
  2. Lorsque nous appelons la méthode restaurer() pour restaurer un enregistrement, la valeur du champ delete_at d'origine de l'enregistrement sera effacée ;
  3. Lorsque nous appelons la méthode forceDelete() pour supprimer définitivement un enregistrement, la valeur du champ delete_at de l'enregistrement sera effacée ; être effacé. Cela ne fonctionne pas.
On peut voir que le mécanisme de suppression logicielle peut facilement restaurer les données historiquement supprimées, masquant ainsi efficacement les enregistrements supprimés sans affecter l'intégrité de la base de données.

3. Étapes pour supprimer automatiquement les données

Dans Laravel, nous pouvons utiliser les commandes Artisan pour supprimer régulièrement des données. La méthode d'implémentation spécifique est la suivante :

    Créer une classe de commandes de console
Tout d'abord, nous créons une classe de commandes dans le répertoire appConsoleCommands et héritons de la classe IlluminateConsoleCommand. Au cours du processus de développement, nous pouvons modifier et étendre cette classe en fonction de nos propres besoins.

    Écrire une méthode pour supprimer automatiquement les données
Dans la classe CustomDeleteCommand, nous devons écrire une méthode nommée delete() et implémenter la logique des données qui doivent être automatiquement supprimées. Par exemple :

/**
 * 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();
}
Dans le code ci-dessus, nous définissons un délai d'expiration $expiredTime, puis utilisons la base de données de Laravel et l'ORM Eloquent pour supprimer les enregistrements correspondants dans les tables des utilisateurs et des publications.

Il est à noter que nous avons utilisé la méthodewhereHas() d'Eloquent ORM pour supprimer les enregistrements éligibles dans la table des publications et sa table de commentaires associée.

    Enregistrer une commande pour supprimer automatiquement les données
Enfin, nous devons enregistrer la commande CustomDeleteCommand dans la liste des commandes d'Artisan afin de pouvoir exécuter la commande dans le terminal.

Nous pouvons enregistrer cette commande dans la méthode planning du fichier appConsoleKernel.php. Par exemple :

protected function schedule(Schedule $schedule)
{
    $schedule->command('delete:data')->daily();
}
Le code ci-dessus implémente la fonction d'exécution automatique de CustomDeleteCommand chaque jour. Nous pouvons également modifier cette méthode si nécessaire pour implémenter une fonction de suppression de données planifiée personnalisée.

4. Résumé

Cet article présente la méthode de suppression automatique des données dans Laravel. En utilisant le mécanisme de suppression logicielle d'Eloquent ORM, nous pouvons facilement supprimer automatiquement les données inutiles dans un certain intervalle de temps, réduisant ainsi la pression liée à la suppression manuelle des données et améliorant l'efficacité des applications Web.

En développement réel, nous pouvons modifier et étendre cette méthode selon les besoins pour répondre aux différents besoins de l'entreprise. J'espère que cet article sera utile aux développeurs Laravel.

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