Laravel 4 migriert Rollback-Probleme

73

Ich kann die Artisan-Migration usw. problemlos ausführen, aber wenn ich versuche, sie mit Migration: Rollback zurückzusetzen, wird immer wieder der Fehler angezeigt.

c:\xampp\htdocs\laravel>php artisan migrate:rollback
{"error":{"type":"Symfony\\Component\\Debug\\Exception\\FatalErrorException","message":"Class 'CreateCodesnippetsTable' not found","file":"C:\\xampp\\htdocs\\laravel\\vendor\\laravel\\framework\\src\\Illum
inate\\Database\\Migrations\\Migrator.php","line":301}}

Ist das ein Fehler? oder wie soll ich das debuggen?

Dexty
quelle
Bitte geben Sie die Migrationsdateien für die Migrationen an, die Sie
Marco Rivadeneyra
pastebin.com/z5c7nvZd (aufgelistet)
Dexty
Wie heißt Ihre CodeSnippetsMigration-Datei? Haben Sie diesen oder den Klassennamen manuell geändert?
RMOBIS
1
Ich hatte das gleiche Problem. Aber in meinem Fall ist es bei einer Migration fehlgeschlagen: Zurücksetzen / Migrieren: Aktualisieren. Das Problem war, dass ich eine Migrationsdatei gelöscht habe, die Tabellenmigrationen jedoch immer noch einen Eintrag für diese Datei enthielten, sodass artisan diese Migration aufgrund eines nicht gefundenen Klassenfehlers nicht rückgängig machen konnte. Ich habe diesen Eintrag aus der Migrationstabelle gelöscht und er hat einwandfrei funktioniert.
DeyyyFF

Antworten:

177

Vielleicht haben Sie dieses Problem bereits gelöst. Aber ich stelle fest, dass Sie aus irgendeinem Grund bei einem Rollback häufig composer dumpautoloadzuerst ausgeführt werden müssen. Auch wenn Ihre Migration funktioniert.

DerLola
quelle
2
Der Dokumentation fehlt dieser Leckerbissen. ( laravel.com/docs/migrations#rolling-back-migrations )
erj1
5
Du flippst genial. Hatte mich eine Stunde lang fuchsig gemacht.
al_manchester
Warum müssen wir Composer Dumpautoload ausführen?
Muhammad
1
Wir benötigen Composer Dump-Autoload, da Migrationen nur eine Reihe von Klassen sind, die beim Hoch- und Herunterfahren automatisch geladen werden. Allerdings zeigte PHP Artisan Dump-Autoload keinen Composer.Json-Fehler an, während Composer Dump-Autoload dies tat.
Dmitriy Sintsov
In meinem Fall hatte ich Composer noch nicht auf diesem Computer installiert. (Kopierte das gesamte Verzeichnis bei der Neuinstallation von Linux.) Während der Migration: make führt dump-autoload aus, wurde es auf meinem lokalen Computer nicht ausgeführt, da ich keinen Composer hatte. Die Installation von Composer und das Ausführen von dump-autoload funktionierten.
Dustin Graham
37

Nachdem ich gerade einige Tage mit diesem Problem gerungen habe, denke ich, dass ich jetzt die endgültige Antwort auf die Lösung dieses Problems geben kann. Ja, großer Anruf, den ich kenne, aber ertrage es mit mir.

Die erste Anlaufstelle, wenn Sie auf dieses Problem stoßen, ist die Ausführung composer dump-autoload. Dies sollte zu einer aktualisierten Version der Datei führen vendor/composer/autoload_classmap.php.

Wenn autoload_classmap.phpes nicht aktualisiert wird, liegt möglicherweise ein Berechtigungsproblem vor. In diesem Fall können Sie es versuchen sudo composer dump-autoload.

Wenn autoload_classmap.php dies jedoch aktualisiert wird, überprüfen Sie, ob es einen Eintrag für Ihre Migrationsklasse enthält (in diesem Fall CreateCodesnippetsTable). Wenn für diese Klasse kein Eintrag vorhanden ist, sollten Sie Ihre composer.jsonDatei überprüfen und sicherstellen, dass der app/database/migrationsOrdner im Abschnitt zum automatischen Laden enthalten ist, z.

"autoload": {
    "classmap": [
        "app/controllers",
        "app/models",
        "app/database/migrations"
    ]
},

Dieses letzte bisschen hat die Dinge für mich vermasselt. In einem fehlgeleiteten Versuch, Dinge zu optimieren, zog ich so viel wie möglich aus meiner composer.jsonDatei heraus und dachte naiv, dies würde nur Webanfragen betreffen. Es stellt sich heraus, dass dies auch Artisan betrifft. composer dump-autoloadDas Problem wurde für mich behoben , indem ich diese Zeile wieder einführte und ausführte .

Wenn all dies fehlschlägt, liegt möglicherweise ein Fehler in einer der unterstützenden Bibliotheken vor, der das Problem verursacht. In diesem Fall können Sie versuchen, mithilfe composer updateoder einer Variation davon zu aktualisieren . Ich vermute jedoch, dass dies selten die wahre Ursache des Problems sein wird.

JamesG
quelle
2
Das Fehlen von Änderungen beim automatischen Laden kann auch zu einer schlechten Syntax führen composer.json. Sie werden wissen, dass beim Ausführen composer dump-autoloadin Ihrem Hauptprojekt, aber beim Ausführen php artisan dump-autoloadein Syntaxfehler auf einem composer.jsonin Ihrer Workbench nicht benachrichtigt wird. Wenn Ihre Workbench-Projekte aktiv sind, cdversuchen Sie es composer dump-autoloadeinzeln auszuführen .
Tomas Buteler
13

Wenn Sie sich in Windows befinden, verwenden Sie einfach Composer in Ihrem Terminal- / Befehlszeilenprogramm und gehen Sie wie folgt vor:

composer dump-autoload

Ich hoffe es hilft!

bmnepali
quelle
8

Soweit ich sehen kann, haben Sie den Klassennamen vermutlich manuell geändert. In dem Fehler haben Sie den Klassennamen, CreateCodesnippetsTableaber in der von Ihnen angegebenen Migrationsdatei (Pastebin) lautet der Klassenname CreateCodeSnippetsTable(beachten Sie das S in Snippets, ich denke, das haben Sie manuell geändert).

Wenn Sie die Migrationstabelle in Ihrer Datenbank überprüfen, werden Datensätze für jede Migration angezeigt. Wenn Sie die Migration erstellen, wird sie mit diesem Namen in der Datenbank gespeichert, und die Rollback-Methode versucht, die Datei mit dem in der Datenbank angegebenen Namen zu lesen. Wenn Sie sie manuell ändern, kann laravel die Klasse nicht finden und Sie erhalten der Fehler.

Um dies zu beheben, können Sie die Änderungen rückgängig machen und versuchen, die Migrationszeile in Ihrer Datenbank zurückzusetzen oder manuell zu bearbeiten, um den richtigen Klassennamen einzuschließen.

Hoffe das hilft.

Altrim
quelle
8

Es scheint mir, dass es keine einzige Lösung für diesen Fehler gibt. Ich habe viele Vorschläge ausprobiert, aber endlich funktioniert dieser an meinem Ende.

COMPOSER=composer.json composer dump-autoload

Geben Sie hier die Bildbeschreibung ein

Ahmad Sharif
quelle
4

Ich habe es durch Laufen behoben

composer.phar update

Heuschrecke
quelle
Diese Abhängigkeiten müssen nicht aktualisiert werden, da nur die automatisch geladenen Dateien gesichert und beim Aktualisieren neu generiert werden müssen. Diese Aufgabe wird auch endlich ausgeführt, es ist jedoch keine vollständige Aktualisierung der Abhängigkeiten erforderlich, falls dies nicht erforderlich ist. Führen Sie einfach den Befehl 'composer dumpautoload' oder 'composer.phar dumpautoload' aus und versuchen Sie es erneut.
Rohwedder
2

Laden Sie die Datei composer.phar von der Laravel-Site herunter und bringen Sie die Datei composer.phar in das Stammverzeichnis des Laravel-Ordners.

Dann kommen Sie vom Terminal in das Stammverzeichnis von Laravel und führen das aus composer.phar update oder führen es einfach aus php artisan dump-autoload.

abu adeel
quelle
1

Ich stand vor dem gleichen Problem und fand das Problem heraus

Ich habe eine Migration zum Hinzufügen eines neuen Spaltendatums in der PatientReasonOfVisits-Tabelle erstellt. Ich habe Laravel-Generatoren verwendet, als ich die Migration mit dem Klassennamen erstellt habe

class AddDateToPatientReasonOfVisitsTable

Stellen Sie sicher, dass Sie nach dem Erstellen einer neuen Migrationsdatei Composer Dump-Autoload ausführen müssen, um sicherzustellen, dass die Datei in der Klassenzuordnungsdatei aufgeführt ist

Der Dateiname war 2014_09_02_214134_add_date_to_patientreasonofvisitstable.php

Die Migration wurde erfolgreich durchgeführt und ein neuer Datensatz wurde zur Migrationstabelle hinzugefügt. In der Migrationsspalte wird der Dateiname verwendet

Wenn ich die Migration zurücksetze, bekomme ich die Klasse nicht gefunden Ausnahme, welche Klasse diese nicht gefunden wird

AddDateToPatientreasonofvisitsTable

Hinweis: Der Unterschied zwischen Klassennamen

Warum und wie ich dieses Problem gelöst habe, denke ich, wenn Sie den Klassennamen zurücksetzen, der unter Verwendung des Migrationsdateinamens aufgelöst wurde. In der Migrationstabelle werden Groß- und Kleinbuchstaben durch den Unterstrich "_" im Dateinamen festgelegt

Nachdem Sie die Migrationsdatei in 2014_09_02_214134_add_date_to_patient_reason_of_visits_table.php umbenannt und Composer dump-autoload ausgeführt haben, nachdem Sie die Datei umbenannt haben, wurde der Klassenname ausnahmslos korrekt aufgelöst

Yehia
quelle
0

Ich habe einfach die Migrationstabelle gelöscht und bin dann gelaufen php artisan migrate:refresh

Dann konnten alle Migrationen ausgeführt werden, nicht sicher, ob dies die beste Methode ist, aber es hat bei mir funktioniert.

Ich verwende Laravel 5.

idro2k
quelle