Ich arbeite in einer Umgebung, in der ich Änderungen nicht direkt auf den Clientservern bereitstellen muss, sondern einen Build-Tarball mit einer Änderungsliste aus einer SVN-Revision erstellen und an das Webteam senden muss.
Das Problem ist, dass mir nichts Besonderes erlaubt ist, nur Änderungen an den Site-Assets und rohen Abfragen. Das bedeutet, dass ich den Client nicht bitten kann, Laravel-Migrationen auszuführen, wenn ich sie für ihre Staging- und Amp-Änderungen brauche ; Live-Datenbanken (und ich traue Migrationen ohnehin nicht genug für Live zu.) Ich habe auch keinen direkten Zugriff auf die Live-Datenbank.
Ich möchte also das rohe SQL erfassen, wenn eine Migration ausgeführt wird. Von dort aus kann ich genau sehen, was sich ändert, und ich kann dem Client sagen, "Hier ist eine SQL-Datei, was geändert werden muss Führen Sie es aus, wenn Sie das Update anwenden. "
Wenn Sie dies an den Anfang Ihrer Routes.php
-Datei hinzufügen, wird es alle von Laravel ausgeführten SQL-Dateien ablegen:
Also tu das, dann starte php artisan migrate
- und alles SQL wird ausgegeben.
Sie könnten dann einfach die SQL in eine Datei oder etwas protokollieren, anstatt einen var_dump zu machen - die Möglichkeiten sind endlos ...
Als alternative Lösung, für die keine Ereignis-Listener eingerichtet werden müssen, können Sie die Option --pretend
verwenden, wenn Sie folgenden Befehl ausführen:
Dadurch werden SQL-Abfragen, die bei der Migration ausgeführt werden, jedoch ohne die eigentliche Migration auszuführen, gelöscht. Es wird in jeder Zeile der Klassenname der Migration und Abfrage ausgegeben, die von dieser Migration ausgeführt wird. Bei einer Migration, die eine users
-Tabelle mit einer eindeutigen email
-Spalte erstellt, erhalten Sie etwa Folgendes:
Diese Option ist seit Laravel 4 bis zur neuesten Version von Laravel (die zu der Zeit, die ich diese Antwort posten bin, 5.1) vorhanden.