2014-02-13 100 views
1

這似乎是一個常見問題,但我無法找到與此直接相關的答案。完整性約束違規:1452無法添加或更新子行:外鍵約束失敗

我有一個用戶和設計表,我試圖添加一個外鍵到設計表,使其引用用戶表上的ID。

爲用戶表中的遷移:

Schema::create('users', function(Blueprint $table) { 
     $table->increments('id'); 
     $table->string('username'); 
     $table->string('email')->unique(); 
     $table->string('password'); 
     $table->timestamps(); 
    }); 

的設計表中的遷移:

Schema::create('designs', function(Blueprint $table) 
    { 
     $table->engine = 'InnoDB'; 

     $table->increments('id')->unsigned(); 
     $table->string('title'); 
     $table->timestamps(); 
    }); 

,我試圖做添加外鍵的遷移:

public function up() 
{ 
    Schema::table('designs', function(Blueprint $table) { 
     $table->integer('user_id')->unsigned(); 
     $table->foreign('user_id')->references('id')->on('users'); 
    }); 
} 


/** 
* Reverse the migrations. 
* 
* @return void 
*/ 
public function down() 
{ 
    Schema::table('designs', function(Blueprint $table) { 
     $table->dropColumn('user_id'); 
    }); 
} 

但是我收到錯誤信息:

[Illuminate\Database\QueryException] 
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`bootstrap`.`#sql-512_179` 
, CONSTRAINT `designs_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)) (SQL: alter table `designs` add constraint designs_user_ 
id_foreign foreign key (`user_id`) references `users` (`id`)) 

我在這裏做錯了什麼?

+1

根據你的'用戶'遷移,id列不是無符號的(儘管我不確定在'Laravel'中默認'increment'是未簽名還是未確認'),所以也許這就是你的問題? – alexrussell

+0

就是這樣。謝謝。 – babbaggeii

+0

我不確定這是真的 - 當我使用增量時,它被設置爲無符號(即使在laravel 3中)。 –

回答

0

在mysql'增量'中是int(10)和'Unsigned'屬性。 但是,如果您只是添加新列並嘗試引用它並獲取SQLSTATE [23000] - 1452錯誤消息,請嘗試插入有效的引用(鍵)。或者清空這兩個表。

相關問題