当前位置: 首页 > 知识库问答 >
问题:

Laravel迁移-完整性约束冲突:1452无法添加或更新子行:外键约束失败

韦胜泫
2023-03-14

我正在尝试运行通过此迁移创建的表inventories的迁移:

Schema::create('inventories', function (Blueprint $table) {
    $table->increments('id');
    $table->integer('remote_id')->unsigned();
    $table->integer('local_id')->unsigned();
    $table->string('local_type');
    $table->string('url')->nullable()->unique();
    $table->timestamps();
});

我正在尝试添加一个run a迁移,其中我正在向表中添加一个外键:

Schema::table('inventories', function (Blueprint $table) {
    $table->foreign('local_id')->references('id')->on('contents')->onDelete('cascade');
});

但是,当我尝试运行迁移时,却出现了一个错误:

[照亮\Database\QueryException]

SQLState[23000]:完整性约束冲突:1452无法添加或更新子行:外键约束失败(middleton
.#SQL-5D6_162A,constraintinventories_local_id_foreign外键(local_id)引用删除级联时的contents(local_id)引用contents(id)(SQL:alter

[PDOException]

SQLState[23000]:完整性约束冲突:1452无法添加或更新子行:外键约束失败(middleton
.#SQL-5D6_162A,constraintinventories_local_id_foreign删除级联时的外键(local_id)引用contents(id

我做错了什么?


共有2个答案

乐正宏深
2023-03-14

我也有同样的问题。通过将nullable添加到字段:

Schema::create('table_name', function (Blueprint $table) {
    ...
    $table->integer('some_id')->unsigned()->nullable();
    $table->foreign('some_id')->references('id')->on('other_table');
    ...
});

请注意,迁移之后,所有已存在的行都将具有some_id=null

UPD:

因为Laravel 7有更短的方法来做同样的事情:

$table->foreignId('some_id')->nullable()->constrained();

同样非常重要的是,nullable位于constraint之前。

更多信息可以在官方文档中找到

韦志新
2023-03-14

您可能在inventories表中有一些记录,其local_idcontents表中没有相应的id,因此出现错误。您可以通过以下两种方法之一来解决问题:

  • 在关闭foreign_key_checks的情况下运行迁移。这将禁用现有行的外键约束(如果需要的话)。这里有文档
  • 仅插入在contents表中具有相应ID字段的那些记录。您可以使用插入到..WHERE exists查询以筛选出记录,并仅插入那些记录。
 类似资料:
  • 我正在尝试将值插入到我的comments表中,但我得到了一个错误。它的意思是我不能添加或更新子行,我不知道这意味着什么。 SQLSTATE[23000]:完整性约束冲突:1452无法添加或更新子行:外键约束失败(.,约束外键()引用()删除时不执行更新时不执行操作)

  • 我有一个简单的团体模型和一个联系模型。 联系人”物品到”一个组和一个组”has很多”联系人。 因此,我的文章migration有一个外键,名为“user_id”。 Contact.php

  • 问题内容: 我试图在我的注释表中插入值,但出现错误。俗话说,我不能添加或更新子行,我也不知道这意味着什么。我的架构如下所示: 我尝试执行的mysql语句如下所示: 我得到的错误看起来像这样: SQLSTATE [23000]:违反完整性约束:1452无法添加或更新子行:外键约束失败(。,CONSTRAINT FOREIGN KEY()引用()删除无操作,更新无操作) 问题答案: 这仅表示在表 co

  • 问题内容: 当我不想相互连接两个表时,我得到以下消息:#1452-无法添加或更新子行:外键约束失败....我想从facebook_users表格中连接oauth_uid2(主键)外键为oauth_uid2的错误列表。但是我总是得到这个信息。我已经清除了数据,但没有任何效果。在表users_facebook中,我还有1条记录。 1452-无法添加或更新子行:外键约束失败(。,在更新级联上删除级联时使

  • 当我不想将两个表相互连接时,我收到消息:#1452 - 无法添加或更新子行:外键约束失败....我想使用外键oauth_uid2将oauth_uid2(主键)从facebook_users选项卡连接到错误选项卡。但我总是收到这个信息。我已经清除了我的数据,但没有任何效果。同样在表中users_facebook我有 1 条记录。 1452-无法添加或更新子行:外键约束失败(., CONSTRAINT

  • 问题内容: 我试图在我的注释表中插入值,但出现错误。俗话说,我不能添加或更新子行,我也不知道这意味着什么。 我的架构看起来像这样 和我试图做的mysql语句看起来像这样 我得到的错误看起来像这样 SQLSTATE [23000]:违反完整性约束:1452无法添加或更新子行:外键约束失败(。,CONSTRAINT FOREIGN KEY()引用()删除无操作,更新无操作) 问题答案: 这只是意味着您