Difflock 1.0.0 stammt von Rati Rukhadze und ist auf GitHub unter `Heyosseus/difflock` verfügbar. Das Paket setzt PHP 8.3 voraus und unterstützt Laravel 12 sowie 13. Als Datenbanken werden MySQL, MariaDB, PostgreSQL und SQLite genannt.
php artisan difflock:lint
php artisan difflock:lint -v
php artisan difflock:lint --rule=drop-columnDifflock liest den Quelltext einer Migration, ohne ihn zu laden oder auszuführen. Für die Prüfung verwendet es das verbundene Schema und Metadaten zur Größe der Tabellen. Die Regeln decken destruktive Vorgänge, Spaltenänderungen, Indizes, Fremdschlüssel und sensible Spaltennamen ab.
`difflock:lint` nimmt standardmäßig ausstehende Migrationen unter die Lupe. Das Beispiel fügt `orders` eine verpflichtende Spalte `channel`, einen eingeschränkten Fremdschlüssel `customer_id` mit `cascadeOnDelete()`, eine nullable Spalte `card_number` mit der Länge 32 und einen Index auf `status` hinzu. Für `customers` entfernt es `legacy_token` und benennt `name` in `full_name` um.
Bei einer befüllten Datenbank markiert Difflock die erforderliche neue Spalte, `dropColumn()` und die Umbenennung. Zusätzlich weist es darauf hin, dass `cascadeOnDelete()` untergeordnete Datensätze direkt in der Datenbank löscht. Model-Events, Observer und Soft Deletes greifen dabei nicht. Die Regel `change-column` vergleicht `->change()` mit der aktuellen Spaltendefinition. `unindexed-foreign-key` prüft den vom Datenbank-Engine benötigten Index. `redundant-index` erkennt etwa `(status)`, wenn `(status, created_at)` bereits existiert.
Mit `-v` lassen sich die Befunde erweitern. `--rule=` beschränkt die Ausgabe auf eine Regel. Gibt es keine ausstehende Migration, prüft der Befehl alle Migrationsdateien. Ein bestehendes Projekt kann den bisherigen Bestand mit `php artisan difflock:lint --all --accept` bestätigen. Die Referenz landet in `database/difflock/accepted.json`.
Für Schemaabweichungen speichert Difflock den beobachteten Zustand der Datenbank. Das Schema wird nicht aus den Migrationsdateien rekonstruiert. Bedingungen, Schleifen und Raw SQL in diesen Dateien müssen deshalb nicht ausgewertet werden. `php artisan difflock:diff --save` erzeugt `database/difflock/schema.json`, das in die Versionsverwaltung aufgenommen werden kann. Ein späteres `php artisan difflock:diff` vergleicht die aktuelle Verbindung mit dieser Datei. Mit `--from=staging --to=production` lassen sich zwei konfigurierte Verbindungen vergleichen.
Die JSON-Referenz enthält Tabellen, Spalten, Indizes, Standardwerte und Fremdschlüssel. Datensätze und Zugangsdaten werden nicht gespeichert. `snapshot.defaults`, `snapshot.comments` und `ignore.tables` steuern den Umfang. Für PostgreSQL verweist der Beitrag zusätzlich auf Vacuums Schema-Linting.
Die Installation verändert `php artisan migrate` nicht. Der Schutz läuft über `php artisan difflock:migrate`. Der Befehl prüft ausstehende Migrationen und stoppt vor dem Datenbank-Schreibvorgang, sobald die konfigurierte Blockierstufe erreicht ist. `--allow-risky` hebt diese Sperre auf. Laravels `--force` bleibt eine getrennte Bestätigung für Migrationen in der Produktion.
Für CI steht `php artisan difflock:check --ci` bereit. Der Rückgabewert 0 bedeutet einen erfolgreichen Check. 1 steht für Schemaabweichungen oder Befunde ab dem konfigurierten Schwellenwert. 2 signalisiert, dass der Check nicht ausgeführt werden konnte. Regeln, die nur den Quelltext benötigen, laufen auch ohne Datenbankverbindung; fehlende Tabellendaten werden gemeldet.
`php artisan difflock:mcp` startet einen eigenständigen MCP-Server über stdio. Die vier Werkzeuge liefern Tabellenkontext, Migrations-Linting, Schema-Drift-Prüfungen und Regel-Dokumentation. Das Migrationswerkzeug akzeptiert einen Dateipfad oder Quelltext. So kann ein KI-Coding-Agent eine Migration anhand des aktuellen Schemas und der Tabellenstatistiken prüfen, bevor er die Datei anlegt. `php artisan difflock:explain` erstellt ein Markdown-Briefing ohne Sprachmodell und ohne externe API.
Installiert wird das Paket mit `composer require heyosseus/difflock --dev`. Die Konfiguration lässt sich mit `php artisan vendor:publish --tag=difflock-config` veröffentlichen. `php artisan difflock:doctor` meldet die Verbindung, verfügbare Tabellen, ausstehende Migrationen, registrierte Regeln und die Schreibberechtigung der konfigurierten Datenbankrolle. Für die Prüfung einer Produktionsverbindung eignet sich eine Rolle mit Leserechten.




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.