:完整性约束违规:1452 无法添加或更新子行:laravel 迁移中的外键约束失败

Posted

技术标签:

【中文标题】:完整性约束违规:1452 无法添加或更新子行:laravel 迁移中的外键约束失败【英文标题】:: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails in laravel migration 【发布时间】:2021-11-11 09:01:16 【问题描述】:

在我的迁移文件中,我将组织 ID 添加到用户表中,我尝试了以下所有代码但尚未解决

class AddOrganizationIdToUsersTable extends Migration

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    
        Schema::table('users', function (Blueprint $table) 
//            $table->foreignId('organization_id')->references('id')->on('organizations')->onDelete('cascade');
            $table->foreignId('organization_id')->constrained('organizations')->cascadeOnDelete();
//            $table->foreign('organization_id')->references('id')->on('organizations')->onDelete('cascade');
        );
    

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    
        Schema::table('users', function (Blueprint $table) 
            //
        );
    

【问题讨论】:

您可以编辑您的帖子以包含您的迁移文件吗? 应该是$table->foreignId('organization_id')->constrained()->onDelete('cascade'); 您的组织表需要在迁移之前添加到迁移中。 【参考方案1】:

我的用户表上有数据,因此在迁移时出现错误,为了解决这个问题,我将该字段添加为可为空

$table->foreignId('organization_id')->nullable()->references('id')->on('organizations')->onDelete('cascade');

【讨论】:

【参考方案2】:

如果你写foreignId需要:

$table->foreignId('organization_id')->constrained('organizations')->cascadeOnDelete();

或者只是foreign

$table->foreign('organization_id')->references('id')->on('organizations')->onDelete('cascade');

【讨论】:

无法添加或更新子行:外键约束失败 你有organizations 表吗?需要先迁移该表 语法错误或访问冲突:1072 表中不存在键列“organization_id” 我正在同时迁移两个迁移组织,然后将组织 ID 添加到用户 需要更多信息。添加以质疑所有涉及的迁移【参考方案3】:

问题可能是此迁移在 organizations 表迁移之前运行,当它试图找到它以创建约束时它失败了。

我建议在 AddOrganizationIdToUsersTable 上:

Schema::table('users', function (Blueprint $table) 
            $table->foreignId('organization_id');
        );

关于组织创建迁移:

Schema::table('users', function(Blueprint $table) 
            $table->foreign('organization_id')->references('id')->on('organizations');
        );

#2 解决方案: 通过更改文件名上的时间戳,将组织表的迁移移动到您的 AddOrganizationIdToUsersTable 之前运行

【讨论】:

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

完整性约束违规:1452 无法将子行添加或更新到我的数据库中

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

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

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

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

完整性约束违规:1452 无法添加或更新子行:外键约束失败(Laravel 应用程序)