我创建了一个新的迁移,将列添加到现有表中,并将外键添加到现有表中。
这是使用新列的迁移:
UPDATE postmeta
SET meta_value = 'visible'
WHERE meta_key = '_visibility'
AND post_id = ( SELECT post_id
FROM postmeta
WHERE meta_key = '_sku'
AND meta_value = 846635025502
LIMIT 1 )
当我运行migrate命令时,我得到:
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`))
我该如何解决?
答案 0 :(得分:1)
错误的原因可能如下:
父表categories
和/或子表events
已经包含了记录。由于您要引用父表的特定列(id
),MySQL将期望子表具有父表中存在的值,因此完整性约束违规
一个可能的解决方案(如果父项不为空)是在外键列的events
表中添加一个默认值:
$table->integer( 'category_id' )->unsigned()->after( 'place_id' );
$table->foreign('category_id')->references('id')->on('categories')->default(1);
答案 1 :(得分:0)
我也遇到了同样的情况,但是我解决了这个问题,在创建列时添加了默认值:
$table->integer( 'category_id' )->unsigned()->after( 'place_id' )->default(1);
确保表“类别”具有ID为1的记录。