gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 07:46:53 27 4
gpt4 key购买 nike

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

订单表的架构:

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();
});

员工表的架构:

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 表成功创建了约束,但由于某种原因,在尝试为 employees 创建约束时出现错误:

[Illuminate\Database\QueryException] SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table orders add constraint orders_employee_id_foreign foreign key (employee_id) references employees (id))

我提取了它试图用完的查询并直接在数据库上尝试它并得到了同样的错误:

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

MySQL error

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

Table info from Sequel Pro

我用来创建每个约束匹配的语法。它会创建一个而不创建另一个的原因吗?

旁白

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

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

我想补充的是如何在 laravel 中重新排序迁移。上面写着 here in the docs :

Each migration file name contains a timestamp which allows Laravel to determine the order of the migrations.

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

The errant order of migrations

修复非常简单:重命名employees 的迁移,使其时间戳在orders 之前:

Correct migration order

简单修复。再次感谢!

最佳答案

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

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

关于mysql - 无法使用 Laravel 5 迁移添加外键约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34074178/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com