无法在 Laravel 中添加外键
Unable to add foreign key in Laravel
在 laravel 迁移文件中,我有以下代码:
Schema::table('stripe_customers', function (Blueprint $table) {
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
});
'user_id' 是 table 'stripe_customers' 中现有的无符号整数列。
'id' 是 'users' 中的主键列。
然而,当我 运行 迁移命令时,我收到以下错误消息:
[Illuminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1005 Can't create table 'thedealerapp.#sql-47a_78859' (errno: 150) (SQL:
alter table `stripe_customers` add constraint stripe_customers_user_id_foreign foreign key (`user_id`)
references `users` (`id`))
[PDOException]
SQLSTATE[HY000]: General error: 1005 Can't create table 'thedealerapp.#sql-47a_78859' (errno: 150)
为什么会这样?
因此,创建外键失败的可能原因有几种。
-
users
.id
是否已编入索引? MySQL 需要两个表的索引来创建外键。虽然 stripe_customers
.user_id
是隐式创建的,但请确保 users
.id
.
stripe_customers
中是否有可能无法通过外键检查的内容?这会导致创建外键时出错。
- 您确认两个表的列类型相同吗? MySQL 将要求两者相同
- 你能确认两个表都在同一个架构中吗?如果您的一个表以某种方式位于不同的数据库中,那么 MySQL 需要对数据库的显式引用。
在 laravel 迁移文件中,我有以下代码:
Schema::table('stripe_customers', function (Blueprint $table) {
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
});
'user_id' 是 table 'stripe_customers' 中现有的无符号整数列。
'id' 是 'users' 中的主键列。
然而,当我 运行 迁移命令时,我收到以下错误消息:
[Illuminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1005 Can't create table 'thedealerapp.#sql-47a_78859' (errno: 150) (SQL:
alter table `stripe_customers` add constraint stripe_customers_user_id_foreign foreign key (`user_id`)
references `users` (`id`))
[PDOException]
SQLSTATE[HY000]: General error: 1005 Can't create table 'thedealerapp.#sql-47a_78859' (errno: 150)
为什么会这样?
因此,创建外键失败的可能原因有几种。
-
users
.id
是否已编入索引? MySQL 需要两个表的索引来创建外键。虽然stripe_customers
.user_id
是隐式创建的,但请确保users
.id
. stripe_customers
中是否有可能无法通过外键检查的内容?这会导致创建外键时出错。- 您确认两个表的列类型相同吗? MySQL 将要求两者相同
- 你能确认两个表都在同一个架构中吗?如果您的一个表以某种方式位于不同的数据库中,那么 MySQL 需要对数据库的显式引用。