当前位置: 首页 > 知识库问答 >
问题:

无法使用Laravel 5迁移添加外键约束

徐兴昌
2023-03-14

我正在尝试为orders表创建迁移。此表有两个表的外键约束:employeesclients

orders表的架构:

Schema::create('orders', function (Blueprint $table) {
    $table->increments('id');

    $table->integer('client_id')->unsigned();
    $table->foreign('client_id')->references('id')->on('clients');

    $table->integer('employee_id')->unsigned();
    $table->foreign('employee_id')->references('id')->on('employees');

    $table->text('description');
    $table->string('status');
    $table->date('submitted_on');
    $table->date('completed_on');
    $table->timestamps();
});

employees表的架构:

Schema::create('employees', function (Blueprint $table) {
    $table->increments('id');
    $table->string('type');
    $table->timestamps();
});

客户端表的架构:

Schema::create('clients', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name');
    $table->integer('user_id')->unsigned();
    $table->foreign('user_id')
            ->references('id')
            ->on('users')
            ->onDelete('cascade');
    $table->timestamps();
});

运行迁移时,已成功为clients表创建约束,但由于某些原因,在尝试为员工创建约束时出现错误:

[Illumb\Database\QueryException]SQLSTATE[HY000]:一般错误:1215无法添加外键约束(SQL:alter tableordersadd constraint orders\u employee\u id\u foreign key(employee\u id)引用employeesid

我提取了它试图使用的查询,并直接在数据库上进行了尝试,但得到了相同的错误:

-- Query:
alter table `orders` add constraint orders_employee_id_foreign foreign key (`employee_id`) references `employees` (`id`)

360a-a370-45a8-84d5-e7e302c5fafb.png" width="100%" height="100%" />

至于出了什么问题,我有点困惑。约束设置与客户端约束相同,并且创建成功:

我用来创建每个约束的语法匹配。有什么原因可以解释为什么它会创造一个而不是另一个?

@PabloDigiani检查迁移的创建顺序的解决方案是正确的;订单表是在导致错误的雇员表之前创建的。

解决方案是确保员工迁移在“订单”之前运行。

我想补充的是如何在laravel中重新排序迁移。文件中说:

每个迁移文件名都包含一个时间戳,允许Laravel确定迁移顺序。

当我检查时间戳顺序时,employees位于orders之后(只是我通过artisan创建迁移的任意顺序):

修复非常简单:重命名员工的迁移,使其时间戳位于订单之前:

简单的修复。再次感谢!

共有1个答案

张锐藻
2023-03-14

使用Laravel迁移数据库时,检查表的创建顺序非常重要。在这种情况下,应该在orders表之前创建employees表。否则,将抛出外键约束错误。

只需更改表创建的顺序,迁移就会正常运行。

 类似资料:
  • 我正在尝试在Laravel中创建外键,但是当我使用迁移表时,出现以下错误: 我的迁移代码如下: 优先级迁移文件 用户迁移文件 任何关于我做错了什么的想法,我现在就想知道,因为我有很多表需要创建,例如用户、客户、项目、任务、状态、优先级、类型、团队。理想情况下,我希望创建使用外键保存此数据的表,即和等。 希望有人能帮助我开始。

  • 我试图在Laravel中创建外键,但是当我使用artisan迁移我的表时,我被抛出以下错误: 模块迁移表: 课程迁移表: 任何关于我做错了什么的想法,我想现在就得到这个,因为我需要创建很多表,例如用户、客户端、项目、任务、状态、优先级、类型、团队。理想情况下,我想创建包含外键、i... eclients_project和project_tasks等数据的表。 希望有人能帮助我开始。

  • 我有多个迁移,但我认为与这个问题相关的两个迁移是“作业”和“会话”迁移。 作业迁移

  • 我已经发现了几十个类似的问题,但没有一个解决方案在我的案例中有效。当我运行“php artisan migrate:fresh”时,它抛出了错误。。。 illumb\Database\QueryException:SQLSTATE[HY000]:一般错误:1215无法添加外键约束(SQL:alter tableadd constraint外键()引用()关于删除级联) > 我检查auth用户表,它

  • 我创建了一个名为用户的表。有一些表被称为公司、名称、部门。我想添加company_id,designation_id,department_id列到用户表作为外键。 我试过了,但没用 当我迁移迁移时,它会显示此错误。 Illumb\Database\QueryException:SQLSTATE[HY000]:一般错误:1005无法创建表(错误号:150“外键约束格式不正确”)(SQL:alter

  • 问题内容: 因此,我作为项目需求试图将外键约束添加到数据库中,并且它第一次或在两个不同的表上运行,但是在尝试添加外键约束时,我在两个表上遇到错误。我收到的错误消息是: 错误1215(HY000):无法添加外键约束 这是我用来创建表的SQL,两个有问题的表是和。 问题答案: 要查找特定错误,请运行以下命令: 并查看该部分。 子列的数据类型必须与父列完全匹配。例如,由于是,也需要是,而不是。 另外,您