Heim >PHP-Framework >Laravel >Zusammenfassung einiger häufiger Fehler bei der Laravel-Migration

Zusammenfassung einiger häufiger Fehler bei der Laravel-Migration

藏色散人
藏色散人nach vorne
2022-01-05 16:07:262348Durchsuche

Die folgende Tutorial-Kolumne von Laravel stellt Ihnen einige häufige Fehler und Lösungen für Anfänger der Laravel-Migration vor. Ich hoffe, dass sie für alle hilfreich ist!

Vorwort

Ich habe vor Kurzem angefangen, Laravel zu lernen. Ich möchte ein einfaches Adressbuchsystem aufbauen und zwei Tabellen, eine Filiale und eine Kontakte einrichten. Beim Erstellen der Migrationsdatei habe ich nicht sorgfältig darüber nachgedacht, dass die Kontakttabelle mit den IDs der Filialen verknüpft ist. Daher ist beim Ausführen des Migrationsbefehls der folgende Fehler aufgetreten

[Illuminate\Database\QueryException] 
 
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `contacts` add constraint `contac 
 
ts_branch_id_foreign` foreign key (`branch_id`) references `branches` (`id`) on delete cascade) 
 
[PDOException] 
 
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint

Der erste Verdacht besteht darin, dass die Tabellen sequentiell erstellt wurden. Daher ändere ich manuell das Datum im Migrationsdateinamen der Zweige und führe dann

php artisan migrate:reset

aus. Es erscheint die folgende Fehlermeldung:

[ErrorException] 
 
include(/Users/Ade/www/laravel_phonebook5.2): failed to open stream: Operation now in progress

fehlgeschlagen Stream öffnen Fehlerlösung

Es ist nicht sehr verständlich, wenn man sich nur die Fehlermeldung anschaut. Wir haben uns die Protokolldatei von Laravel angesehen

more storage/logs/laravel.log

und den Absatz gefunden, in dem FEHLER erschien:

[2016-09-29 18:05:35] local.ERROR: exception 'ErrorException' with message 'include(/Users/Ade/www/laravel_phonebook5.2): failed to open stream: Operation now in progress' in /Users/Ade/www/laravel_phonebook5.2/vendor/composer/ClassLoader.php:412 
Stack trace: 
#0 /Users/Ade/www/laravel_phonebook5.2/vendor/composer/ClassLoader.php(412): Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(2, 'include(/Users/...', '/Users/Ade/www/...', 412, Array) 
#1 /Users/Ade/www/laravel_phonebook5.2/vendor/composer/ClassLoader.php(412): Composer\Autoload\includeFile() 
#2 /Users/Ade/www/laravel_phonebook5.2/vendor/composer/ClassLoader.php(301): Composer\Autoload\includeFile('/Users/Ade/www/...') 
#3 [internal function]: Composer\Autoload\ClassLoader->loadClass('CreateBranchesT...') 
#4 /Users/Ade/www/laravel_phonebook5.2/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php(335): spl_autoload_call('CreateBranchesT...') 
#5 /Users/Ade/www/laravel_phonebook5.2/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php(227): Illuminate\Database\Migrations\Migrator->resolve('2016_09_12_1728...') 
#6 /Users/Ade/www/laravel_phonebook5.2/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php(206): Illuminate\Database\Migrations\Migrator->runDown(Object(stdClass), false)

Der Fehler erschien in Zeile 412 des ClassLoader.php-Datei


Beim Betrachten des umstrukturierten Codes stellten wir fest, dass es sich um eine Anweisung handelte, die eine Datei aufrief:

Zusammenfassung einiger häufiger Fehler bei der Laravel-Migration

Und diese Datei wurde in der Protokolldatei angegeben, das heißt

. Der vom Protokoll angeforderte Name ist der Name der Migrationsdatei des Zweigs, den ich geändert habe. resolve('2016_09_12_1728...')

Suchen wir, wo normale Migrationsdateien erscheinen:

mdfind 2014_10_12_000000_create_users_table.php|grep phonebook

Zusammenfassung einiger häufiger Fehler bei der Laravel-Migration

Es ist ersichtlich, dass normale Migrationsdateien an drei Stellen erscheinen und geänderte nur an einer Stelle.


Bearbeiten Sie diese beiden Dateien, die nicht angezeigt wurden.


Passen Sie die Datei autoload_static.php an.

Ich habe festgestellt, dass in der Datei Vendor/Composer/autoload_static.php die Anweisungen zu Zweigen wie folgt lauten:

'CreateBranchesTable' => __DIR__ .,

Ich denke, das sollte so sein. Als ich den Namen änderte, löschte PHP Storm automatisch alle Zweigdateipfade in dieser Datei für mich. Fügen Sie es einfach wieder hinzu.

Beziehen Sie sich auf die Konfiguration des normalen Migrationsdateinamens und fügen Sie

'CreateBranchesTable' => __DIR__ . '/../..' . '/database/migrations/2016_09_12_172822_create_branches_table.php',

Passen Sie die Datei autoload_classmap.php an

Wir haben festgestellt, dass in der Datei autoload_classmap.php der Pfadname der Zweige immer noch der Pfad ist vor der Änderung:

'CreateBranchesTable' => $baseDir . '/database/migrations/2016_09_29_172822_create_branches_table.php',

Ändern Sie es in

'CreateBranchesTable' => $baseDir . '/database/migrations/2016_09_12_172822_create_branches_table.php',

und führen Sie den Migrationsbefehl aus

php artisan migrate:reset

Zusammenfassung einiger häufiger Fehler bei der Laravel-Migration

OK. Der Fehler ist gerade verschwunden, aber wir stellen fest, dass die Kontakttabelle nicht zurückgesetzt wurde


Kontakte Rollback-Fehleranalyse

Stellen Sie über sequel pro eine Verbindung zur Datenbank her, um sie anzuzeigen

Zusammenfassung einiger häufiger Fehler bei der Laravel-Migration

Es wurde festgestellt, dass die Kontakttabelle vorhanden ist, die Migrationstabelle jedoch keinen Inhalt enthält. Beim Ausführen muss ein Fehler aufgetreten sein Der vorherige Migrationsbefehl wurde ausgeführt und der Ausführungsdatensatz der Kontakte wurde nicht in die Migrationstabelle geschrieben. Wir können den Migrationsbefehl erneut ausführen und es versuchen. Löschen Sie zuerst diese beiden Tabellen manuell, d der Kontakte in der Migrationstabelle ist es kein Wunder, dass beim Ausführen des Zurücksetzens kein Rollback-Vorgang für die Kontakte erfolgt.

Kontakte können keine branch_id-Fremdschlüssellösung erstellenZusammenfassung einiger häufiger Fehler bei der Laravel-Migration


Da wir nun den Migrationsbefehl ausgeführt haben, werfen wir noch einmal einen Blick auf den frühesten Fehler:

php artisan migrate
Beruhigen Sie sich und analysieren Sie ihn, da die Eingabeaufforderung SQL ist Fehler, wir können diese SQL-Anweisung genauso gut manuell in Sequel Pro ausführen.

Tatsächlich hat die Ausführung einen Fehler zurückgegeben.

Wenn man sich die Anweisung genau ansieht, liegt kein Fehler vor. Auf den ersten Blick sollte dies auf die Inkonsistenz zwischen der Typdeklaration branch_id und dem ID-Typ in der Branches-Tabelle zurückzuführen sein. Überprüfen Sie die Struktur der Kontakte und stellen Sie fest, dass „Unsigned“ nicht aktiviert ist. Führen Sie nach der Überprüfung die SQL-Anweisung aus, um den Fremdschlüssel hinzuzufügen. Dies gelingt.

Zusammenfassung einiger häufiger Fehler bei der Laravel-Migration

找到问题原因后,我们就清空数据库,修改 contacts 的 migration 文件,调整 branch_id 为:

$table->integer('branch_id')->unsigned()->comment('机构ID');

再重新执行 migrate 命令,成功!

Zusammenfassung einiger häufiger Fehler bei der Laravel-Migration

相关推荐:最新的五个Laravel视频教程

Das obige ist der detaillierte Inhalt vonZusammenfassung einiger häufiger Fehler bei der Laravel-Migration. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:jb51.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen