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 :
À 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 :
/** * 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', '<', $expiredTime) ->delete(); //删除posts表及其关联的comments表中deleted_at字段大于$expiredTime的记录 Post::whereHas('comments', function ($query) use ($expiredTime) { $query->where('deleted_at', '<', $expiredTime); })->where('deleted_at', '<', $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.
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!