0

當我種子數據,與外鍵的表存在,那麼下面的錯誤occur..i解決不了這個外鍵種子數據,我該如何解決?數據庫接種錯誤,而在laravel

[Illuminate\Database\QueryException] 
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update 
a child row: a foreign key constraint fails (`doctodoor2014`.`staffs`, 
CONSTRAINT `staffs_specialty_id_foreign` FOREIGN KEY (`specialty_id`) REFERENCES 
specialties` (`id`)) (SQL: insert into `staffs` (`id`, `first_name`, `last_name`) 
values (1, Admin, Admin)) 

我可以用外鍵種子表嗎?

+0

不熟悉laravel,但種子專業首先是你應該尋找的。 –

+0

您需要首先查看引用的表,然後使用外鍵對錶進行種子處理 – warspite

+0

您很可能以錯誤的順序播種。 – Dave

回答

0

是的,你可以用外鍵種子。在插入子項之前,您只需確保父項存在。 查看有問題的兩個表的內容,並查看您試圖插入的給定子ID是否存在父ID。

我發現我的問題是我是,每次我跑我的種子類,父表的ID的會增加。由於我的子表插入了硬編碼的ID,我會得到一個引用完整性錯誤。

作爲一個快速的解決辦法,你可以刪除數據庫並重新創建它,這將重置所有自增的id的。

更好的解決您的種子定義,雖然當然。標識不希望這與實際父ID替換我的硬編碼標識的子表如下:

//,'user_id'=>1 
    ,'user_id'=>User::first()->id 

爲幫助調試 - 開始和每個種子類的末尾添加echo語句來幫忙看看哪裏錯誤是。

public function run() { 
    echo PHP_EOL.'QuestionTableSeeder BEGIN'.PHP_EOL; 
    $test_id = Test::first()->id; 
    echo PHP_EOL."test_id:'" . $test_id. "'"; 

    ... 
    echo PHP_EOL.'QuestionTableSeeder END'.PHP_EOL; 
} 

絆了我的另一件事是,我打電話:

User::first()->id 

這是返回一個空字符串。 事實證明,它實際上意味着是:

User::first()->user_id 

該表是由另一家開發商誰不遵循命名的主鍵爲ID的約定創建!