150 "Foreign key constraint is incorrectly formed"
150 "Foreign key constraint is incorrectly formed"
我在迁移 table 时遇到问题。
我有一个用户 table,它有一个字符串 ID,并且 table 是在 SQL 之前创建的,没有迁移。
稍后,我使用以下代码创建了一个名为 surveys 的 table,它具有指向 user_id 的外键。
hema::create('surveys', 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('behaviour');
$table->timestamps();
});
每当我尝试迁移它时,我总是收到以下错误,我不知道为什么会这样。
table 用户中的 id 是 varchar 40,user_id.
也是
SQLSTATE[HY000]: General error: 1005 Can't create table `d0372341`.`surveys` (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter table `surveys` add constraint `surveys_user_id_foreign` foreign key (`user_id`) references `users` (`id`) on delete cascade on update cascade)
at D:\xampp install\htdocs\game-db\vendor\laravel\framework\src\Illuminate\Database\Connection.php:692
688▕ // If an exception occurs when attempting to run a query, we'll format the error
689▕ // message to include the bindings with SQL, which will make this exception a
690▕ // lot more helpful to the developer instead of just the database's errors.
691▕ catch (Exception $e) {
➜ 692▕ throw new QueryException(
693▕ $query, $this->prepareBindings($bindings), $e
694▕ );
695▕ }
696▕ }
所以,如果你能帮我解决这个问题,我将不胜感激。
将$table->string('user_id',40);
更改为$table->unsignedBigInteger('user_id)
或者如果你使用 Laravel 8.x 你基本上可以做到
$table->foreignId("user_id")->constrained()->cascaseOnDelete();
然后运行这个命令
php artisan migrate:refresh
编辑:
确保您的用户 table 中的主键是字符串,然后更新您的用户模型
public $incrementing = false;
protected $keyType = 'string';
所以我post这里的回答是为了帮助别人:
(ps。别忘了将此答案标记为最佳答案)
在您的 users
table 中,确认您的 id
字段的排序规则是 utf8mb4_unicode_ci。错误有时可能是由于此。
我在迁移 table 时遇到问题。
我有一个用户 table,它有一个字符串 ID,并且 table 是在 SQL 之前创建的,没有迁移。
稍后,我使用以下代码创建了一个名为 surveys 的 table,它具有指向 user_id 的外键。
hema::create('surveys', 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('behaviour');
$table->timestamps();
});
每当我尝试迁移它时,我总是收到以下错误,我不知道为什么会这样。 table 用户中的 id 是 varchar 40,user_id.
也是
SQLSTATE[HY000]: General error: 1005 Can't create table `d0372341`.`surveys` (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter table `surveys` add constraint `surveys_user_id_foreign` foreign key (`user_id`) references `users` (`id`) on delete cascade on update cascade)
at D:\xampp install\htdocs\game-db\vendor\laravel\framework\src\Illuminate\Database\Connection.php:692
688▕ // If an exception occurs when attempting to run a query, we'll format the error
689▕ // message to include the bindings with SQL, which will make this exception a
690▕ // lot more helpful to the developer instead of just the database's errors.
691▕ catch (Exception $e) {
➜ 692▕ throw new QueryException(
693▕ $query, $this->prepareBindings($bindings), $e
694▕ );
695▕ }
696▕ }
所以,如果你能帮我解决这个问题,我将不胜感激。
将$table->string('user_id',40);
更改为$table->unsignedBigInteger('user_id)
或者如果你使用 Laravel 8.x 你基本上可以做到
$table->foreignId("user_id")->constrained()->cascaseOnDelete();
然后运行这个命令
php artisan migrate:refresh
编辑:
确保您的用户 table 中的主键是字符串,然后更新您的用户模型
public $incrementing = false;
protected $keyType = 'string';
所以我post这里的回答是为了帮助别人: (ps。别忘了将此答案标记为最佳答案)
在您的 users
table 中,确认您的 id
字段的排序规则是 utf8mb4_unicode_ci。错误有时可能是由于此。