Laravel - 无法解决违反完整性约束的问题
Laravel - Can't solve Integrity constraint violation
我创建了一个新的迁移以向现有的 table 添加一个列并向现有的 table 添加一个外键。
这是新列的迁移:
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`))
我该如何解决?
错误原因可能如下:
parenttablecategories
and/orchildtableevents
已经有记录了。当您想引用 parent table 的特定列 (id
) 时,MySQL 将期望 child table 具有一个值parent 中存在,因此 违反完整性约束 。
一个可能的解决方案(如果 parent 不为空)是在 events
table 中为外键列添加一个默认值:
$table->integer( 'category_id' )->unsigned()->after( 'place_id' );
$table->foreign('category_id')->references('id')->on('categories')->default(1);
我也遇到过同样的情况,但我解决了在创建列时添加默认值的问题:
$table->integer( 'category_id' )->unsigned()->after( 'place_id' )->default(1);
确保 table "categories" 有一条 id = 1 的记录。
我创建了一个新的迁移以向现有的 table 添加一个列并向现有的 table 添加一个外键。
这是新列的迁移:
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`))
我该如何解决?
错误原因可能如下:
parenttablecategories
and/orchildtableevents
已经有记录了。当您想引用 parent table 的特定列 (id
) 时,MySQL 将期望 child table 具有一个值parent 中存在,因此 违反完整性约束 。
一个可能的解决方案(如果 parent 不为空)是在 events
table 中为外键列添加一个默认值:
$table->integer( 'category_id' )->unsigned()->after( 'place_id' );
$table->foreign('category_id')->references('id')->on('categories')->default(1);
我也遇到过同样的情况,但我解决了在创建列时添加默认值的问题:
$table->integer( 'category_id' )->unsigned()->after( 'place_id' )->default(1);
确保 table "categories" 有一条 id = 1 的记录。