2017-12-09 5 views
1

Ich habe eine Bestellungstabelle und eine haben eine sell_shipping_labels, die orders.id als ausländische verweist. Allerdings, wenn ich die Laravel Migration laufen bekomme ich den gefürchteten Fehlercode:Laravel-Migration (errno: 150 "Foreign-Key-Constraint ist falsch gebildet")

[Illuminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1005 Can't create table cheapbooks_test . #sql-b5b_b2a (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter table sell_shipping_labels add constraint sell_shipping_labels_order_id_foreign foreign key (order_id) references orders (id))

[Doctrine\DBAL\Driver\PDOException]
SQLSTATE[HY000]: General error: 1005 Can't create table cheapbooks_test . #sql-b5b_b2a (errno: 150 "Foreign key constraint is incorrectly formed")

Das ist mein orders Tabellenschema:

Schema::create('orders', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->integer('user_id'); 
     $table->integer('book_id'); 
     $table->integer('status_id'); 
     $table->double('payment_amount')->nullable(); 
     $table->timestamp('received_at')->nullable(); 
     $table->timestamp('paid_at')->nullable(); 
     $table->timestamps(); 
     $table->softDeletes(); 
    }); 

Und das ist mein sell_shipping_labels Schema:

Schema::create('sell_shipping_labels', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->unsignedInteger('order_id'); 
     $table->string('shippo_object_id'); 
     $table->string('label_url'); 
     $table->string('tracking_url'); 
     $table->string('tracking_number'); 
     $table->timestamp('arrived_at'); 
     $table->timestamps(); 
     $table->softDeletes(); 

     $table->foreign('order_id')->references('id')->on('orders'); 
    }); 
} 

Jetzt Ich habe das Internet auf den Kopf gestellt, um das Problem herauszufinden. Alle Post zu diesem Problem beziehen sich alle auf die Tatsache, dass die Bestellungstabelle erstellt werden muss vor die Tabelle, die den Fremdschlüssel hat, aber das ist kein Problem für mich, weil meine Dateien in der richtigen Reihenfolge sind.

Antwort

1

Da increments() eine nicht signierte Integer-Spalte erstellt, müssen Sie auch die Fremdschlüsselspalte als unsigned integer definieren:

$table->unsignedInteger('order_id'); 

Oder:

$table->integer('order_id')->unsigned(); 

https://laravel.com/docs/5.5/migrations#foreign-key-constraints

+0

Ich habe meine aktualisiert Tabellenschema, aber ich bekomme immer noch den gleichen Fehlercode. – FrenchMajesty

+0

@FrenchMajesty haben Sie versucht, DB neu zu erstellen? Falls ja, poste bitte die neue Fehlermeldung, weil ich mir ziemlich sicher bin, dass die Syntax korrekt ist. –

+1

Löschen und neu erstellen meiner Datenbank sowie Ihre Antwort hat den Trick. Vielen Dank! – FrenchMajesty

Verwandte Themen