【问题标题】:cant create table in laravel 5.5 using migration because of foreign key fail由于外键失败,无法在 laravel 5.5 中使用迁移创建表
【发布时间】:2018-02-06 09:30:58
【问题描述】:

运行迁移命令时出现以下错误

SQLSTATE[HY000]: 一般错误: 1005 Can't create table test.#sql-644_119 (errno: 150 "外键约束 i s 格式不正确") (SQL: alter table show_packages add constraint show_packages_package_id_foreign foreign 关键 (package_id) 引用 rent_package_no (id))

这是我的桌子

我该如何解决?

【问题讨论】:

  • 请显示迁移。
  • Schema::create('show_packages', function (Blueprint $table) { $table->increments('id'); $table->integer('pack_id')->unsigned() ; $table->integer('cat_id')->unsigned(); $table->timestamps(); $table->foreign('pack_id')->references('id')->on('rent_package_no' ); $table->foreign('cat_id')->references('id')->on('rent_lend_categories'); });
  • 这是pack_id 的迁移,而不是package_id 的迁移
  • @AlexeyMezenin 谢谢...问题解决了...这一切都是因为迁移顺序而发生的

标签: mysql laravel


【解决方案1】:

移民订单问题来了 确保在运行此迁移之前创建您的外部表(rent_package_no 和rent_lend_categories)

尝试使用以下代码:

Schema::create('show_packages', function(Blueprint $table) { 
    $table - > increments('id');
    $table - > integer('pack_id') - > unsigned();
    $table - > integer('cat_id') - > unsigned();
    $table - > timestamps();
    $table - > foreign('pack_id') - > references('id') - > on('rent_package_no')->onUpdate('cascade')->onDelete('cascade');
    $table - > foreign('cat_id') - > references('id') - > on('rent_lend_categories')->onUpdate('cascade')->onDelete('cascade'); 
});

【讨论】:

  • 迁移文件的顺序很重要,因此您可能会遇到此问题。将您的外部表迁移文件(即rent_package_no 和rent_lend_categories)移动到此迁移文件的顶部。
  • 谢谢...问题解决了...这一切都是因为迁移顺序造成的
【解决方案2】:

检查您的迁移顺序。如果您的 migrate 命令试图在 show_packages 表之前创建 rent_package_no 表,这将在 MySQL 中发生。它似乎按日期顺序排列,从最早到最新。换句话说,它试图引用的表上的 cat_id 应该存在。

【讨论】:

  • 谢谢.. 那么我如何先迁移rent_package_no 表...因为我先创建show_package 迁移。抱歉,我是新人。
  • @akshay-dighe 例如,更改文件名。迁移文件按名称排序
  • 谢谢...问题解决了...这一切都是因为迁移顺序造成的
  • @akshay-dighe 你好)。如果我帮助你,请检查我的答案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-20
  • 2017-08-16
  • 2019-09-10
  • 1970-01-01
  • 2016-11-20
  • 2016-06-24
相关资源
最近更新 更多