SQLSTATE [23000]:完整性约束违规:1452 无法在 laravel 迁移中添加或更新子行

Posted

技术标签:

【中文标题】SQLSTATE [23000]:完整性约束违规:1452 无法在 laravel 迁移中添加或更新子行【英文标题】:SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row on laravel migration 【发布时间】:2021-05-29 20:54:06 【问题描述】:

我在 appointments 表中添加了一个外键,我的数据库通过 laravel 迁移被称为 arl

但是当我运行迁移时:

    public function up()

    Schema::table('appointments', function (Blueprint $table) 

        $table->foreign('order_detail_id')->references('id')->on('order_details');
        
    );

我收到了这个错误:

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`arl`.`#sql-5470_6`, CONSTRAINT `appointments_order_detail_id_foreign` FOREIGN KEY (`order_detail_id`) REFERENCES `order_details` (`id`)) (SQL: alter table `appointments` add constraint `appointments_order_detail_id_foreign` foreign key (`order_detail_id`) references `order_details` (`id`))

检查错误不知道为什么sql不识别我的表名,把这个奇怪的名字arl`.`#sql-5470_6应该是arl`.`appointments

我去heidi sql复制de查询,我得到了同样的错误。

编辑:在 laragon 本地服务上的问题我尝试使用 xampp 并且工作正常

【问题讨论】:

请为 order_details 和约会添加表格定义。 【参考方案1】:

试试这个:

    $table->unsignedBigInteger('order_detail_id');
    $table->foreign('order_detail_id')->references('id')->on('order_details');

【讨论】:

表名的问题,不知道sql为什么把我的表名取为#sql-5470_6【参考方案2】:

您必须删除表 order_details 中的所有行,然后重试。

或者:

add ->default( any id from table order_details)
$table->unsignedBigInteger('order_detail_id')->default(1);
$table->foreign('order_detail_id')->references('id')->on('order_details');

【讨论】:

>您必须删除表 order_details 中的所有行,然后重试。这是我的问题的解决方案

以上是关于SQLSTATE [23000]:完整性约束违规:1452 无法在 laravel 迁移中添加或更新子行的主要内容,如果未能解决你的问题,请参考以下文章

SQLSTATE[23000]:完整性约束违规 1452 无法添加或更新子行:外键约束失败

Innobyte 插件问题:SQLSTATE [23000]:完整性约束违规:1452 无法添加或更新子行

SQLSTATE [23000]:完整性约束违规:1452 无法添加或更新子行:外键约束失败

Laravel:正确保存后返回重定向抛出 SQLSTATE [23000]:完整性约束违规

SQLSTATE [23000]:完整性约束违规:1452 无法添加或更新子行:外键约束失败 - Laravel

Laravel 7 错误 - SQLSTATE [23000]:完整性约束违规:1048 列 'first_name' 不能为空