Laravel – 在现有表上添加外键和数据

本教程将介绍Laravel - 在现有表上添加外键和数据的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

Laravel - 在现有表上添加外键和数据 教程 第1张

问题描述

我有现有的表 objects 与数据.现在我需要添加名为 holdings 的新表,并将对象之间的关系添加到 holdings 表.在迁移文件中,我打印了这个:

$table->foreign('holding_id')->references('id')->on('holdings')->onDelete("NO ACTION");

并在尝试迁移时收到此错误

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update 
a child row: a foreign key constraint fails (`kolomnaoffice`.`#sql-f10_126` 
CONSTRAINT `objects_holding_id_foreign` FOREIGN KEY (`holding_id`) 
REFERENCES `holdings` (`id`) ON DELETE NO ACTION) (SQL: alter table `objects` add constraint 
`objects_holding_id_foreign` foreign key (`holding_id`) references `holdings` 
(`id`) on delete NO ACTION)

我有正确的数据库结构(两个 InnoDB),字段存在并且具有正确的类型(int).唯一不同的是,objects 表是数据,而holdings 表是新的空的.

推荐答案

holding_id列应该是unsigned

新建一个迁移文件并迁移,迁移代码应该是这样的:

Schema::table('objects', function (Blueprint $table) {
 $table->integer('holding_id')->unsigned()->change();

 $table->foreign('holding_id')->references('id')->on('holdings');
});

调用change()方法改变现有列的结构.

不需要调用onDelete("NO ACTION")方法.

好了关于Laravel - 在现有表上添加外键和数据的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。