Heim >PHP-Framework >Laravel >Zusammenfassung einiger häufiger Fehler bei der Laravel-Migration
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 constraintDer 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:resetaus. 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
more storage/logs/laravel.logund 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
. Der vom Protokoll angeforderte Name ist der Name der Migrationsdatei des Zweigs, den ich geändert habe. resolve('2016_09_12_1728...')
mdfind 2014_10_12_000000_create_users_table.php|grep phonebookEs ist ersichtlich, dass normale Migrationsdateien an drei Stellen erscheinen und geänderte nur an einer Stelle.
Passen Sie die Datei autoload_static.php an.
'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
'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:resetOK. Der Fehler ist gerade verschwunden, aber wir stellen fest, dass die Kontakttabelle nicht zurückgesetzt wurde
Kontakte Rollback-Fehleranalyse
Kontakte können keine branch_id-Fremdschlüssellösung erstellen
php artisan migrateBeruhigen 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.
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.
找到问题原因后,我们就清空数据库,修改 contacts 的 migration 文件,调整 branch_id 为:
$table->integer('branch_id')->unsigned()->comment('机构ID');
再重新执行 migrate 命令,成功!
相关推荐:最新的五个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!