2016-11-29 104 views
4

任何人都可以幫我解決這個問題嗎?laravel errno 150外鍵約束不正確

有3和表2個的外鍵:

運行遷移後
  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(); 
     }); 

錯誤:

[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") 
+0

對不起,它不工作:Schema :: create('firm',function(Blueprint $ table){table-> increments('id ') - > unsigned(); Schema :: create('jobs',function(Blueprint $ table){ $ table-> increments('id'); $ table-> integer('firm_id') - > unsigned (); $ table-> foreign('firm_id') - > references('id') - > on('firm'); – Yrtymd

+0

並且這不起作用:Schema :: create('firm',function (藍圖$ table){ $ table-> increment('id'); Schema :: create('jobs',function(Blueprint $ table){ $ table-> increments('id'); $ table->整數('firm_id'); $ table-> foreign('firm_id') - >引用('id') - > on('firm'); – Yrtymd

回答

11

在對外鍵的情況下,參照和引用字段必須具有完全相同的數據類型。

創建兩個usersfirmsid領域簽署整數。但是,您創建兩個外鍵作爲無符號整數,因此創建密鑰失敗。

您需要將unsigned子句添加到id字段定義中,或者從外鍵字段中刪除unsigned子句。

+1

太棒了,它幫助了我。 – Webinion

0
  • 用戶
  • 收銀員是指用戶
  • 學生是指收銀員

另外在laravel聲明外鍵你正在引用必須在頂部的所有表時。在這種情況下,您可以使用「 - > unsigned()」修​​飾符。

+1

你能解釋這是如何回答這個問題的嗎? –

+0

正如你所看到的,「用戶」表位於最上方,而收銀員有一個「外鍵」,指的是與用戶相同的「用戶」表。只需在創建遷移時保持表格的有序性。 –

相關問題