【问题标题】:Unable to add foreign key in Laravel无法在 Laravel 中添加外键
【发布时间】:2017-02-24 00:26:53
【问题描述】:

在 laravel 迁移文件中,我有以下代码:

   Schema::table('stripe_customers', function (Blueprint $table) {
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
   });

“user_id”是表“stripe_customers”中现有的无符号整数列。

'id' 是 'users' 中的主键列。

但是,当我运行 migrate 命令时,我收到以下错误消息:

  [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)  

为什么会这样?

【问题讨论】:

  • 如果您删除该调用并尝试将其直接添加到数据库中会发生什么?
  • 由于列类型或表排序规则不匹配,通常会发生 err 150。
  • user_id 上的所有值都是有效的用户 ID?两列(stripe_customers.user_idusers.id 具有相同的数据类型?
  • 'id' is a primary key column in 'users' - id 也是无符号整数吗?

标签: mysql laravel laravel-5 laravel-5.2 laravel-5.1


【解决方案1】:

因此,创建外键失败有几种不同的可能原因。

  • users.id 是否已编入索引? MySQL 需要两个表上的索引来创建外键。虽然stripe_customers.user_id 是隐式创建的,但请确保users.id
  • stripe_customers 中是否有可能无法通过外键检查的内容?这会导致创建外键时出错。
  • 您是否确认两个表的列类型相同? MySQL 将要求两者相同
  • 您能确认两个表在同一个架构中吗?如果您的某个表以某种方式位于不同的数据库中,那么 MySQL 需要明确引用该数据库。

【讨论】:

  • 问题是一列未签名,而另一列未签名。感谢您的帮助
猜你喜欢
  • 2019-11-13
  • 2020-09-12
  • 2016-02-11
  • 2019-10-26
  • 1970-01-01
  • 1970-01-01
  • 2020-03-12
  • 2021-10-27
相关资源
最近更新 更多