Laravel Chores es un paquete de Amr Lotfy Saleh para operaciones de datos largas y puntuales como backfills y limpiezas. Procesa registros en lotes y escribe el último ID procesado en una tabla chore_runs tras cada lote. Un despliegue, un fallo o un Ctrl+C pierden como máximo un lote de trabajo. Volver a ejecutar el mismo comando reanuda donde se detuvo. El diseño sigue el gem maintenance_tasks de Shopify para Rails.
Un chore es una clase con dos métodos: collection() devuelve la consulta de los registros a procesar y process() maneja un registro. php artisan make:chore genera el esqueleto. El tamaño de lote es 500 por defecto mediante el archivo de configuración, salvo que se defina en la clase. El procesamiento por lotes, el seguimiento del progreso y el registro de errores ocurren alrededor de la clase.
Los lotes usan paginación keyset por clave primaria en lugar de offsets. Así se evita el error clásico en el que las filas actualizadas salen del chunk que se está iterando. Los registros que lanzan una excepción se registran con ella en una tabla failures y se omiten, y la ejecución continúa. php artisan chore:failures inspecciona los fallos y php artisan chore:retry los reprocesa tras una corrección, mucho más barato que repetir todo el trabajo.
Seis comandos Artisan cubren scaffolding, ejecución, listado, pausa, inspección de fallos y reintento. chore:run muestra el progreso en vivo en el terminal, chore:pause detiene en el siguiente límite de lote. Un modo de salida JSON y códigos de salida distintos (0 limpio, 1 completado con fallos, 2 fatal) hacen el paquete apto para CI. Para trabajos recurrentes, el comando se combina con el planificador de tareas de Laravel, por ejemplo un PurgeExpiredRecords mensual.
Una salvedad: los checkpoints son por lote, no por registro. Los registros de un lote en curso pueden reexaminarse tras una reanudación. process() debe ser idempotente siempre que sea posible. Los chores se ejecutan en primer plano con un worker por chore, y la colección necesita una clave primaria ordenable como auto-incremento o ULID. La ejecución en cola y los workers paralelos están en la hoja de ruta; el paquete Queue-SQL ya cubre actualizaciones masivas repartidas entre queue workers.
El paquete requiere PHP 8.2+ y Laravel 12 o 13, y admite MySQL, PostgreSQL y SQLite. La instalación se realiza con composer require amrlotfy/laravel-chores, seguido de la publicación y ejecución de las migraciones. La configuración permite cambiar el directorio de las clases de chores (app/Chores por defecto), el tamaño de lote predeterminado, los nombres de las tablas y un intervalo de espera entre lotes para regular la carga. El código fuente y la documentación están en el repositorio de GitHub AmrLotfy/laravel-chores.
Comentarios
Aún no hay comentarios — escribe el primero.
Inicia la conversación
Sin cuenta ni contraseña — introduce tu correo y te enviamos un enlace de acceso de un solo uso. ¿Primera vez? Todo se configura automáticamente.
Tu valoración se aplicará automáticamente al iniciar sesión.
Revisa tu bandeja de entrada
Hemos enviado un enlace de acceso a …. Ábrelo en este dispositivo — esta pestaña te conectará automáticamente.
¿No llega nada? Mira en la carpeta de spam — y marca el correo como «No es spam» para que la próxima vez llegue directo.