laravel errno 150 foreign key-Einschränkung wird falsch gebildet
Kann jemand mir helfen, dieses problem zu lösen?
Gibt es 3 Tische, mit 2 foreign keys:
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
Schema::create('firms', function (Blueprint $table) {
$table->increments('id');
$table->string('title')->nullable();
$table->integer('user_id')->unsigned()->nullable();
$table->foreign('user_id')->references('id')->on('users');
$table->timestamps();
});
Schema::create('jobs', function (Blueprint $table) {
$table->increments('id');
$table->string('title')->nullable();
$table->integer('firm_id')->unsigned()->nullable();
$table->foreign('firm_id')->references('id')->on('firms');
$table->timestamps();
});
Fehler nach der Ausführung der migration:
[Illuminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1005 Can't create table `job`.`#sql-5fc_a1`
(errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter ta
ble `firms` add constraint `firms_user_id_foreign` foreign key (`user_id`)
references `users` (`id`))
[PDOException]
SQLSTATE[HY000]: General error: 1005 Can't create table `job`.`#sql-5fc_a1`
(errno: 150 "Foreign key constraint is incorrectly formed")
Sorry, es funktioniert nicht: Schema::create('Unternehmen', function (Blueprint $Tabelle) { $table-> - Schritten('id')->unsigned(); Schema::create('jobs', function (Blueprint $Tabelle) { $table-> - Schritten('id'); $Tabelle->Ganzzahl('firm_id')->unsigned(); $Tabelle->Fremdsprachen('firm_id')->Verweise('id')->auf('Unternehmen');
und das wird nicht funktionieren: Schema::create('Unternehmen', function (Blueprint $Tabelle) { $table-> - Schritten('id'); Schema::create('jobs', function (Blueprint $Tabelle) { $table-> - Schritten('id'); $Tabelle->Ganzzahl('firm_id'); $Tabelle->fremden('firm_id')->Verweise('id')->auf('Unternehmen');
und das wird nicht funktionieren: Schema::create('Unternehmen', function (Blueprint $Tabelle) { $table-> - Schritten('id'); Schema::create('jobs', function (Blueprint $Tabelle) { $table-> - Schritten('id'); $Tabelle->Ganzzahl('firm_id'); $Tabelle->fremden('firm_id')->Verweise('id')->auf('Unternehmen');
InformationsquelleAutor Yrtymd | 2016-11-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Im Falle von foreign keys, die auf die verwiesen wird und verweisen auf Felder müssen exakt den gleichen Datentyp.
Erstellen Sie die
id
Felder in beidenusers
undfirms
als unterzeichnet zahlen. Allerdings erstellen Sie die Fremdschlüssel als unsigned ganzen zahlen, daher ist die Schaffung der Schlüssel fehl.Müssen Sie entweder fügen Sie die
unsigned
- Klausel, um dieid
Feld-Definitionen, oder entfernen Sie dieunsigned
- Klausel von der foreign key-Felder.Vergessen Sie jede andere Sache, sagte, dass dies wichtig
the referenced and referencing fields must have exactly the same data type.
ich war fast gehen, um mich Aufhängen. Danke Kumpel.InformationsquelleAutor Shadow
Zusätzlich bei der Deklaration von Fremdschlüsseln in laravel alle Tabellen, die Ihr beziehen müssen, die auf der Spitze. In diesem Fall können Sie verwenden "->unsigned()" modifier..
Wie Sie sehen können, "Benutzer" Tabelle wurde auf der Spitze, und die Kasse hat die "foreign key" bezieht sich auf "users" - Tabelle gleich mit Schüler. Nur halten Sie Ihren Tisch organisiert, bei der Erstellung der migration.
InformationsquelleAutor Louie Guides
Meisten der Zeit diese Art von Fehler tritt auf, aufgrund der Datentyp mismatch auf die Tabelle.
Sowohl die primären Schlüssel der Tabelle & Fremdschlüssel Tabelle sollte mit dem gleichen Datentyp und der gleichen option.
Beispiel:
Benutzer
Bestellungen
Oben genannten Beispiel, ich bin versucht zu ordnen Fremdschlüssel zur Benutzer Tabelle aus, um die Tabelle, aber ich habe bigInteger datatable, um die Tabelle während in der user-Tabelle, ich habe einfach integer. Das ist, warum es ist, erzeugt diese Art von Fehler.
Auch, Wenn Sie verwendet haben, unsigned(), nullable() etc Optionen mit primär-oder Fremdschlüssel-dann sollten Sie gleich auf beide Platz.
InformationsquelleAutor Mayank Dudakiya
wir sind Tabelle villes:
foreign key in der Tabelle Benutzer zum Beispiel :
InformationsquelleAutor Saad Tejda
Dies geschieht, wenn Sie testen Sie Ihre laravel-app und Sie haben eine Instanz von MySQL in den tests, die Gegenstand von Datenbank-Migrationen.
Vor der Ausführung des Tests, mein Migrationen funktionieren. Dann traf ich diesen Fehler.
Die Art, wie ich dieses Problem behoben war, einfach die gesamte Datenbank und erstellen Sie Sie erneut. Migrieren Sie dann wieder.
InformationsquelleAutor Uriah Galang
wenn Sie verweisen auf Felder und haben exakt die gleichen Daten geben, aber Fehler existiert
Sie können ändern Sie das Datum der migration-Datei
nur seine Arbeit
InformationsquelleAutor Ehab Elzeny