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?
Antworten:
Vielleicht haben Sie dieses Problem bereits gelöst. Aber ich stelle fest, dass Sie aus irgendeinem Grund bei einem Rollback häufig
composer dumpautoload
zuerst ausgeführt werden müssen. Auch wenn Ihre Migration funktioniert.quelle
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ührenvendor/composer/autoload_classmap.php
.Wenn
autoload_classmap.php
es nicht aktualisiert wird, liegt möglicherweise ein Berechtigungsproblem vor. In diesem Fall können Sie es versuchensudo 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 FallCreateCodesnippetsTable
). Wenn für diese Klasse kein Eintrag vorhanden ist, sollten Sie Ihrecomposer.json
Datei überprüfen und sicherstellen, dass derapp/database/migrations
Ordner 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.json
Datei heraus und dachte naiv, dies würde nur Webanfragen betreffen. Es stellt sich heraus, dass dies auch Artisan betrifft.composer dump-autoload
Das 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 update
oder einer Variation davon zu aktualisieren . Ich vermute jedoch, dass dies selten die wahre Ursache des Problems sein wird.quelle
composer.json
. Sie werden wissen, dass beim Ausführencomposer dump-autoload
in Ihrem Hauptprojekt, aber beim Ausführenphp artisan dump-autoload
ein Syntaxfehler auf einemcomposer.json
in Ihrer Workbench nicht benachrichtigt wird. Wenn Ihre Workbench-Projekte aktiv sind,cd
versuchen Sie escomposer dump-autoload
einzeln auszuführen .Wenn Sie sich in Windows befinden, verwenden Sie einfach Composer in Ihrem Terminal- / Befehlszeilenprogramm und gehen Sie wie folgt vor:
Ich hoffe es hilft!
quelle
Soweit ich sehen kann, haben Sie den Klassennamen vermutlich manuell geändert. In dem Fehler haben Sie den Klassennamen,
CreateCodesnippetsTable
aber in der von Ihnen angegebenen Migrationsdatei (Pastebin) lautet der KlassennameCreateCodeSnippetsTable
(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.
quelle
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.
quelle
Ich habe es durch Laufen behoben
composer.phar update
quelle
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 ausphp artisan dump-autoload
.quelle
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
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
quelle
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.
quelle