【问题标题】:SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row (Laravel 6)SQLSTATE [23000]:完整性约束违规:1452 无法添加或更新子行(Laravel 6)
【发布时间】:2020-01-23 03:33:00
【问题描述】:

我做错了什么?

环境: Laravel 6,家园(本地),Windows 10

创建外部表(迁移):

Schema::create('external', function (Blueprint $table) {
                $table->increments('id')->unsigned();
                $table->foreign('id')->references('order_id')->on('order');
            });

创建订单表(迁移):

Schema::create('order', function (Blueprint $table) {
    $table->increments('id');
    $table->unsignedInteger('order_id')->index();

External.php(模型):

class External extends Model
    public function orders()
    {
        return $this->hasMany(Order::class);
    }
}

Order.php(型号):

public function external()
{
    return $this->belongsTo(External::class);
}

错误信息:

SQLSTATE[23000]:完整性约束违规:1452 无法添加或更新子行:外键约束失败(homestead.external,CONSTRAINT external_id_foreign FOREIGN KEY(id)参考order (order_id)) (SQL: 插入external (site_order_id, order_status,...

【问题讨论】:

    标签: laravel eloquent


    【解决方案1】:

    已编辑(外部表迁移):

    $table->unsignedBigInteger('id')->nullable();
    $table->foreign('id')->references('order_id')->on('order');
    

    已编辑(订单表迁移):

    $table->increments('id');
    $table->unsignedBigInteger('order_id')->index()->unsigned();
    

    【讨论】:

      【解决方案2】:

      这个错误很常见,而且很容易解释。您的 Laravel 代码正在生成一个(或多个)插入,该插入引用了 order 表中不存在的记录。尝试运行以下查询:

      SELECT o.*
      FROM [order] o
      WHERE order_id = <external.id value here>
      

      如果您返回一个空结果集,则意味着您的插入引用了 order 中不存在的数据。

      【讨论】:

      • 好的,谢谢,我想我已经修好了。我以后会用它来调试。
      猜你喜欢
      • 2016-05-31
      • 2015-09-02
      • 2020-09-29
      • 2018-04-17
      • 2020-02-17
      • 2016-07-10
      • 2021-02-14
      • 2014-01-09
      • 2017-04-13
      相关资源
      最近更新 更多