Laravel Chores est un package d'Amr Lotfy Saleh pour les longues opérations de données ponctuelles comme les backfills et les nettoyages. Il traite les enregistrements par lots et écrit le dernier ID traité dans une table chore_runs après chaque lot. Un déploiement, un crash ou un Ctrl+C ne fait perdre au plus qu'un lot de travail. Relancer la même commande reprend là où le traitement s'était arrêté. Le design s'inspire du gem maintenance_tasks de Shopify pour Rails.
Un chore est une classe avec deux méthodes : collection() retourne la requête des enregistrements à traiter, process() en traite un seul. php artisan make:chore génère le squelette. La taille de lot vaut 500 par défaut via le fichier de configuration, sauf si elle est définie dans la classe. Le traitement par lots, le suivi de progression et la journalisation des erreurs se font autour de la classe.
Les lots utilisent une pagination keyset sur la clé primaire plutôt que des offsets. Cela évite le bug classique où les lignes mises à jour sortent du chunk en cours d'itération. Les enregistrements qui lèvent une exception sont consignés avec celle-ci dans une table failures puis ignorés, et le traitement continue. php artisan chore:failures permet d'inspecter les échecs et php artisan chore:retry les retraite après correction, bien moins coûteux qu'une réexécution complète.
Six commandes Artisan couvrent le scaffolding, l'exécution, la liste, la pause, l'inspection des échecs et le retry. chore:run affiche la progression en direct dans le terminal, chore:pause arrête à la prochaine frontière de lot. Un mode de sortie JSON et des codes de sortie distincts (0 propre, 1 terminé avec échecs, 2 fatal) rendent le package compatible CI. Pour les travaux récurrents, la commande se combine avec le planificateur de tâches de Laravel, par exemple un PurgeExpiredRecords mensuel.
Une réserve : les checkpoints sont par lot, pas par enregistrement. Les enregistrements d'un lot en cours peuvent être réexaminés après une reprise. process() doit donc être idempotent dans la mesure du possible. Les chores s'exécutent au premier plan avec un seul worker par chore, et la collection nécessite une clé primaire ordonnable comme un auto-incrément ou un ULID. L'exécution en file et les workers parallèles figurent sur la feuille de route ; le package Queue-SQL couvre déjà les mises à jour de masse réparties sur des queue workers.
Le package exige PHP 8.2+ et Laravel 12 ou 13, et prend en charge MySQL, PostgreSQL et SQLite. L'installation passe par composer require amrlotfy/laravel-chores, puis la publication et l'exécution des migrations. La configuration permet de changer le répertoire des classes de chores (app/Chores par défaut), la taille de lot par défaut, les noms de tables et un intervalle de pause entre les lots pour limiter la charge. Code source et documentation sont disponibles dans le dépôt GitHub AmrLotfy/laravel-chores.
Commentaires
Pas encore de commentaire — écris le premier.
Lance la discussion
Pas de compte ni de mot de passe — saisis simplement ton adresse e-mail et nous t’envoyons un lien de connexion à usage unique. Première visite ? Tout se met en place automatiquement.
Ton évaluation sera appliquée automatiquement après ta connexion.
Vérifie ta boîte mail
Nous avons envoyé un lien de connexion à …. Ouvre-le sur cet appareil — cet onglet te connectera automatiquement.
Rien reçu ? Vérifiez le dossier spam — et marquez le message « Non spam » pour qu'il arrive directement la prochaine fois.