Laravel Chores ist ein Paket von Amr Lotfy Saleh für lange, einmalige Datenoperationen wie Backfills und Aufräumarbeiten. Es verarbeitet Datensätze in Batches und schreibt die zuletzt verarbeitete ID nach jedem Batch in eine chore_runs-Tabelle. Ein Deploy, Absturz oder Ctrl+C kostet damit höchstens einen Batch an Fortschritt. Der erneute Aufruf desselben Befehls setzt an der Stelle wieder auf. Das Design folgt Shopifys maintenance_tasks-Gem für Rails.
Ein Chore ist eine Klasse mit zwei Methoden: collection() liefert die Abfrage der zu bearbeitenden Datensätze, process() verarbeitet einen einzelnen Datensatz. php artisan make:chore erzeugt das Gerüst. Die Batch-Größe liegt standardmäßig bei 500 über die Konfigurationsdatei, sofern sie nicht in der Klasse gesetzt wird. Batching, Fortschrittsverfolgung und Fehlerprotokollierung laufen außen um die Klasse.
Die Batches nutzen Keyset-Paginierung über den Primärschlüssel statt Offsets. Das vermeidet den klassischen Fehler, bei dem aktualisierte Zeilen aus dem gerade iterierten Chunk rutschen. Datensätze, die eine Exception werfen, werden samt Exception in eine failures-Tabelle geschrieben und übersprungen; der Lauf geht weiter. php artisan chore:failures zeigt die Fehler, php artisan chore:retry verarbeitet sie nach einer Korrektur erneut, deutlich günstiger als ein kompletter Neulauf.
Sechs Artisan-Befehle decken Scaffolding, Ausführung, Auflistung, Pausieren, Fehlerinspektion und Retry ab. chore:run zeigt Live-Fortschritt im Terminal, chore:pause stoppt an der nächsten Batch-Grenze. Ein JSON-Ausgabemodus und eigene Exit-Codes (0 sauber, 1 abgeschlossen mit Fehlern, 2 fatal) machen das Paket CI-tauglich. Für wiederkehrende Arbeiten lässt sich der Befehl mit Laravels Task Scheduler kombinieren, etwa ein monatlicher PurgeExpiredRecords-Lauf.
Ein Vorbehalt: Checkpoints gelten pro Batch, nicht pro Datensatz. Datensätze in einem laufenden Batch können nach einem Resume erneut geprüft werden. process() sollte daher wo möglich idempotent sein. Chores laufen im Vordergrund mit einem Worker pro Chore, und die Collection braucht einen sortierbaren Primärschlüssel wie Auto-Increment oder ULID. Queue-Ausführung und parallele Worker stehen auf der Roadmap; das Queue-SQL-Paket deckt Massen-Updates über Queue-Worker bereits heute ab.
Das Paket verlangt PHP 8.2+ und Laravel 12 oder 13 und unterstützt MySQL, PostgreSQL und SQLite. Die Installation läuft über composer require amrlotfy/laravel-chores, danach werden die Migrationen veröffentlicht und ausgeführt. Konfigurierbar sind das Verzeichnis der Chore-Klassen (Standard app/Chores), die Standard-Batch-Größe, die Tabellennamen und ein Sleep-Intervall zwischen Batches zur Lastdrosselung. Quellcode und Dokumentation liegen im GitHub-Repository AmrLotfy/laravel-chores.
Kommentare
Noch keine Kommentare — schreib den ersten.
Starte die Diskussion
Kein Konto, kein Passwort nötig — gib einfach deine E-Mail-Adresse ein, wir senden dir einen einmaligen Anmelde-Link. Beim ersten Mal bist du damit automatisch angemeldet.
Deine Bewertung wird nach der Anmeldung automatisch übernommen.
Schau in dein Postfach
Wir haben einen Anmelde-Link an … gesendet. Öffne ihn auf diesem Gerät — dieser Tab meldet dich automatisch an.
Nichts angekommen? Wirf einen Blick in den Spam-Ordner — und markiere die Mail dort als „Kein Spam“, dann landet sie künftig direkt im Postfach.