我正在尝试为orders
表创建迁移。此表有两个表的外键约束:employees
和clients
。
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 tableorders
add constraint orders\u employee\u id\u foreign key(employee\u id
)引用employees
(id
)
我提取了它试图使用的查询,并直接在数据库上进行了尝试,但得到了相同的错误:
-- 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创建迁移的任意顺序):
修复非常简单:重命名员工
的迁移,使其时间戳位于订单
之前:
简单的修复。再次感谢!
使用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,两个有问题的表是和。 问题答案: 要查找特定错误,请运行以下命令: 并查看该部分。 子列的数据类型必须与父列完全匹配。例如,由于是,也需要是,而不是。 另外,您