我在遷移我的表時遇到了一個問題。
我有一個用戶表,它有一個字串id,這個表是之前用SQL創建的,沒有進行遷移。
后來,我創建了一個名為 surveys 的表,該表有一個指向 user_id 的外鍵,代碼如下。
hema:: create('survey', function (Blueprint$table) {
$table->increments('id')。
$table->string('user_id',40)。
$table->foreign('user_id')-> references('id')-> on('users') ->onUpdate('cascade')->onDelete('cascade') 。
$table->string('gender')。
$table->string('age')。
$table->string('education')。
$table->string(' proficiency');
$table->string('行為')。
$table->timestamps()。
});
每當我試圖遷移時,我總是得到下面的錯誤,我不知道為什么會發生這種情況。 表users中的id是varchar 40,user_id也是。
SQLSTATE[HY000] 。General error: 1005 Cannot create table `d0372341`.`surveys` (errno: 150 "外鍵約束形式不正確") (SQL: alter table `surveys` add constraint `surveys_user_id_foreign` foreign key (`user_id`) references `users` (`id`) on delete cascade on update cascade)
在D:xampp installhtdocsgame-dbvendorlaravelframeworksrcIlluminateDatabaseConnection. php:692。
688▕ //如果在嘗試運行查詢時發生例外,我們將格式化錯誤。
689▕ //訊息包括與SQL的系結,這將使此例外成為
690▕ //span>對開發人員來說更有幫助,而不僅僅是資料庫的錯誤。
691▕ catch (Exception $e) {
? 692▕ throw new QueryException(
693▕ $query, $this-> prepareBindings($bindings), $e.
694▕ )。)
695▕ }
696▕ }
因此,如果你能幫助我解決這個問題,我將非常感激。
uj5u.com熱心網友回復:
所以我把答案貼在這里,以幫助其他人。 (ps. 不要忘了把這個答案標記為最佳答案)
在您的users表中,請確認您的id欄位的整理方式是utf8mb4_unicode_ci。這個錯誤有時可能是由于這個原因造成的。
uj5u.com熱心網友回復:
將$table->string('user_id',40);改為$table->unsignedBigInteger('user_id)/code>
或者如果你使用Laravel 8.x,你基本上可以做到
$table->foreignId("user_id")->constrained()->cascaseOnDelete()。
然后運行這個命令
php artisan migrate:refresh
編輯:
確保用戶表中的主鍵是字串,然后更新你的用戶模型
。public $incrementing = false。
protected $keyType = 'string'/span>;
https://laravel.com/docs/8.x/eloquent#primary-keys
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/320593.html
標籤:
