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

Zusammenfassung einiger häufiger Fehler bei der Laravel-Migration

Jan 05, 2022 pm 04:07 PM
laravel migrate

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
Nach dem Login kopieren

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
Nach dem Login kopieren
Nach dem Login kopieren

aus. Es erscheint die folgende Fehlermeldung:

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

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
Nach dem Login kopieren

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)
Nach dem Login kopieren

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
Nach dem Login kopieren

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__ .,
Nach dem Login kopieren

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',
Nach dem Login kopieren

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',
Nach dem Login kopieren

Ändern Sie es in

'CreateBranchesTable' => $baseDir . '/database/migrations/2016_09_12_172822_create_branches_table.php',
Nach dem Login kopieren

und führen Sie den Migrationsbefehl aus

php artisan migrate:reset
Nach dem Login kopieren
Nach dem Login kopieren

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
Nach dem Login kopieren
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');
Nach dem Login kopieren

再重新执行 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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Vergleich der neuesten Versionen von Laravel und CodeIgniter Vergleich der neuesten Versionen von Laravel und CodeIgniter Jun 05, 2024 pm 05:29 PM

Die neuesten Versionen von Laravel 9 und CodeIgniter 4 bieten aktualisierte Funktionen und Verbesserungen. Laravel9 übernimmt die MVC-Architektur und bietet Funktionen wie Datenbankmigration, Authentifizierung und Template-Engine. CodeIgniter4 nutzt die HMVC-Architektur, um Routing, ORM und Caching bereitzustellen. In Bezug auf die Leistung sorgen das auf Dienstanbietern basierende Designmuster von Laravel9 und das leichte Framework von CodeIgniter4 für eine hervorragende Leistung. In praktischen Anwendungen eignet sich Laravel9 für komplexe Projekte, die Flexibilität und leistungsstarke Funktionen erfordern, während CodeIgniter4 für schnelle Entwicklung und kleine Anwendungen geeignet ist.

Wie vergleichen sich die Datenverarbeitungsfunktionen in Laravel und CodeIgniter? Wie vergleichen sich die Datenverarbeitungsfunktionen in Laravel und CodeIgniter? Jun 01, 2024 pm 01:34 PM

Vergleichen Sie die Datenverarbeitungsfunktionen von Laravel und CodeIgniter: ORM: Laravel verwendet EloquentORM, das eine relationale Klassen-Objekt-Zuordnung bereitstellt, während CodeIgniter ActiveRecord verwendet, um das Datenbankmodell als Unterklasse von PHP-Klassen darzustellen. Abfrage-Builder: Laravel verfügt über eine flexible verkettete Abfrage-API, während der Abfrage-Builder von CodeIgniter einfacher und Array-basiert ist. Datenvalidierung: Laravel bietet eine Validator-Klasse, die benutzerdefinierte Validierungsregeln unterstützt, während CodeIgniter über weniger integrierte Validierungsfunktionen verfügt und eine manuelle Codierung benutzerdefinierter Regeln erfordert. Praxisfall: Beispiel einer Benutzerregistrierung zeigt Lar

Was ist einsteigerfreundlicher: Laravel oder CodeIgniter? Was ist einsteigerfreundlicher: Laravel oder CodeIgniter? Jun 05, 2024 pm 07:50 PM

Für Anfänger bietet CodeIgniter eine sanftere Lernkurve und weniger Funktionen, deckt aber die Grundbedürfnisse ab. Laravel bietet einen größeren Funktionsumfang, weist jedoch eine etwas steilere Lernkurve auf. In Bezug auf die Leistung schneiden sowohl Laravel als auch CodeIgniter gut ab. Laravel verfügt über eine umfangreichere Dokumentation und aktive Community-Unterstützung, während CodeIgniter einfacher und leichtgewichtiger ist und über starke Sicherheitsfunktionen verfügt. Im praktischen Fall der Erstellung einer Blogging-Anwendung vereinfacht EloquentORM von Laravel die Datenmanipulation, während CodeIgniter mehr manuelle Konfiguration erfordert.

Laravel vs CodeIgniter: Welches Framework ist besser für große Projekte? Laravel vs CodeIgniter: Welches Framework ist besser für große Projekte? Jun 04, 2024 am 09:09 AM

Bei der Auswahl eines Frameworks für große Projekte haben Laravel und CodeIgniter jeweils ihre eigenen Vorteile. Laravel ist für Anwendungen auf Unternehmensebene konzipiert und bietet modularen Aufbau, Abhängigkeitsinjektion und einen leistungsstarken Funktionsumfang. CodeIgniter ist ein leichtes Framework, das sich eher für kleine bis mittelgroße Projekte eignet und Wert auf Geschwindigkeit und Benutzerfreundlichkeit legt. Für große Projekte mit komplexen Anforderungen und einer großen Anzahl von Benutzern sind die Leistung und Skalierbarkeit von Laravel besser geeignet. Für einfache Projekte oder Situationen mit begrenzten Ressourcen sind die leichten und schnellen Entwicklungsfunktionen von CodeIgniter idealer.

Laravel – Handwerkerbefehle Laravel – Handwerkerbefehle Aug 27, 2024 am 10:51 AM

Laravel – Artisan Commands – Laravel 5.7 bietet eine neue Möglichkeit, neue Befehle zu behandeln und zu testen. Es enthält eine neue Funktion zum Testen von Handwerkerbefehlen und die Demonstration wird unten erwähnt?

Laravel vs CodeIgniter: Welches Framework ist besser für kleine Projekte? Laravel vs CodeIgniter: Welches Framework ist besser für kleine Projekte? Jun 04, 2024 pm 05:29 PM

Für kleine Projekte eignet sich Laravel, für größere Projekte, die starke Funktionalität und Sicherheit erfordern. CodeIgniter eignet sich für sehr kleine Projekte, die geringes Gewicht und Benutzerfreundlichkeit erfordern.

Welche ist die bessere Template-Engine, Laravel oder CodeIgniter? Welche ist die bessere Template-Engine, Laravel oder CodeIgniter? Jun 03, 2024 am 11:30 AM

Vergleichen Sie Laravel's Blade und die Twig-Vorlagen-Engine von CodeIgniter und wählen Sie je nach Projektanforderungen und persönlichen Vorlieben: Blade basiert auf der MVC-Syntax, die eine gute Codeorganisation und Vorlagenvererbung fördert. Twig ist eine Bibliothek eines Drittanbieters, die flexible Syntax, leistungsstarke Filter, erweiterten Support und eine Sicherheits-Sandbox bietet.

Laravel – Paginierungsanpassungen Laravel – Paginierungsanpassungen Aug 27, 2024 am 10:51 AM

Laravel – Paginierungsanpassungen – Laravel enthält eine Paginierungsfunktion, die einem Benutzer oder Entwickler hilft, eine Paginierungsfunktion einzubinden. Der Laravel-Paginator ist in den Abfrage-Builder und Eloquent ORM integriert. Die Paginierungsmethode automatisch

See all articles