2016-01-04 32 views
1

我已经创建了一个新的迁移,以将列添加到现有表并向现有表中添加外键。Laravel - 无法解决完整性约束违规

这是新列迁移:

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`)) 

我该如何解决?

回答

1

错误的原因可能是以下几点:

父表categories和/或子表events已经在他们的记录。当你想引用父表的特定列(id)时,MySQL将期望子表具有存在于父表中的值,因此完整性约束违规

一个可能的解决方案(如果家长不为空)是在events表中添加默认值的外键列:

$table->integer('category_id')->unsigned()->after('place_id'); 
$table->foreign('category_id')->references('id')->on('categories')->default(1); 
+0

谢谢,这个问题是不是空的父表 –

相关问题