Laravel-Migration Die Fremdschlüsseleinschränkung ist falsch gebildet

9

Bei der Migration meiner Datenbank wird dieser Fehler angezeigt. Unten ist mein Code gefolgt von dem Fehler, den ich beim Ausführen der Migration erhalte.

Code

%Vor%

Fehlermeldung

%Vor%     
Medo tareq 19.09.2015, 15:19
quelle

9 Antworten

8

@JuanBonnett Ihre Frage hat mich zu der Antwort inspiriert, ich nahm auf Laravel, um den Prozess zu automatisieren, ohne Berücksichtigung der Erstellungszeit der Datei selbst, je nach Workflow Mahlzeiten vor Tisch (Kategorien) erstellt werden, weil ich Schema-Datei erstellt habe (Mahlzeiten) vor Kategorien. Das war meine Schuld.

    
Medo tareq 20.09.2015, 10:11
quelle
5

Für mich war alles in der richtigen Reihenfolge, aber es hat immer noch nicht funktioniert. Dann habe ich herausgefunden, dass der Primärschlüssel nicht signiert sein muss.

%Vor%     
zamppe 21.01.2017 15:48
quelle
5

fügen Sie einfach ->unsigned()->index() am Ende des Fremdschlüssels hinzu und es funktioniert

    
geekbro 24.01.2017 08:01
quelle
2

Sie sollten Ihre Migration in Reihenfolge erstellen zum Beispiel möchte ich, dass mein users ein role_id -Feld hat, das von meiner roles -Tabelle

stammt

Ich zuerst beginne meine Rollenmigration php artisan make:migration create_roles_table --create=roles

dann meine zweite Benutzermigration php artisan make:migration create_users_table --create=users

php artisan migration wird mit der Reihenfolge der erstellten Dateien ausgeführt 2017_08_22_074128 _create_roles_table.php und 2017_08_22_134306 _create_users_table überprüfen die datetime-Reihenfolge, die die Ausführungsreihenfolge ist.

Dateien 2017_08_22_074128_create_roles_table.php

%Vor%

2017_08_22_134306_create_users_table

%Vor%     
Napster Scofield 22.08.2017 14:12
quelle
1

Migrationen müssen von oben nach unten erstellt werden.

Erstellen Sie zuerst die Migrationen für die Tabellen, die keinem gehören.

Erstellen Sie dann die Migrationen für Tabellen, die zum vorherigen gehören.

Vereinfachte Antwort auf das Problem der Tabellen-Engine:

Um die Speicher-Engine für eine Tabelle festzulegen, legen Sie die Engine-Eigenschaft für den Schema-Builder fest:

%Vor%

Aus Laravel-Dokumenten: Ссылка

    
Manuel Azar 30.03.2016 16:12
quelle
1

Vielleicht kann es für jeden, der hier landet, hilfreich sein: Ich habe gerade das gleiche Problem erlebt, und in meinem Fall hatte ich eine (zusammengesetzte) eindeutige Einschränkung für die Fremdschlüsselspalte vor der Fremdschlüsseleinschränkung gesetzt. Ich habe das Problem gelöst, indem ich die "einzigartige" Anweisung NACH der "fremden" Anweisung platziert habe.

funktioniert:

%Vor%

Funktioniert nicht:

%Vor%     
Matthias 10.08.2016 17:59
quelle
0

In meinem Fall war das Problem, dass eine der referenzierten Tabellen InnoDB und die andere MyISAM war.

MyISAM unterstützt keine Fremdschlüsselbeziehungen.

Nun sind beide -Tabellen InnoDB . Problem gelöst.

    
nwrman 12.02.2016 10:05
quelle
0

Wenn Sie ->onDelete('set null') in Ihrer Fremdschlüsseldefinition verwenden, stellen Sie sicher, dass das Fremdschlüsselfeld selbst nullable() ie

ist %Vor%     
aphoe 25.01.2017 02:50
quelle
0

Fügen Sie - & gt; nullable () in Ihr Feld ein und stellen Sie sicher, dass alle Felder, auf die Sie sich beziehen, wirklich existieren.

    
Rafael Xavier 11.02.2018 21:46
quelle

Tags und Links