我创建了一个新的迁移以向现有表添加一列并向现有表添加外键。
这是新列的迁移:
Schema::table( 'events', function ( Blueprint $table ) {
$table->integer( 'category_id' )->unsigned()->after( 'place_id' );
$table->foreign('category_id')->references('id')->on('categories');
} );
当我运行迁移命令时,我得到:
[Illuminate\Database\QueryException]
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`meetmount`.`#sql-3c8_424`, CONSTRAINT `events_catego
ry_id_foreign` FOREIGN KEY (`category_id`) REFERENCES `categories` (`id`)) (SQL: alter table `events` add constraint events_category_id_foreign foreign key (`category_id`) r
eferences `categories` (`id`))
和
[PDOException]
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`meetmount`.`#sql-3c8_424`, CONSTRAINT `events_catego
ry_id_foreign` FOREIGN KEY (`category_id`) REFERENCES `categories` (`id`))
我该如何解决?
最佳答案
错误的原因可能如下:
父表 categories
和/或子表 events
中已有记录。当您要引用父表的特定列 (id
) 时,MySQL 会期望子表具有父表中存在的值,因此违反完整性约束。
一个可能的解决方案(如果父级不为空)是在 events
表中为外键列添加一个默认值:
$table->integer( 'category_id' )->unsigned()->after( 'place_id' );
$table->foreign('category_id')->references('id')->on('categories')->default(1);
关于mysql - Laravel - 无法解决违反完整性约束的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34589219/