首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >违反Laravel - Integrity约束: 1452

违反Laravel - Integrity约束: 1452
EN

Stack Overflow用户
提问于 2016-04-19 18:27:05
回答 2查看 939关注 0票数 2

这是我的迁移:

代码语言:javascript
复制
public function up()
    {
      Schema::table('payments', function($table)
      {
        $table->dropColumn('invoice_id');
      });
    }

     public function down()
    {
      Schema::table('payments',function (Blueprint $table){
        $table->unsignedInteger('invoice_id')->index();
        $table->foreign('invoice_id')->references('id')->on('invoices')->onDelete('cascade');
      });
    }

当我运行php artisan migrate:rollback时,它给出了这个异常:

代码语言:javascript
复制
[Illuminate\Database\QueryException]                                                                                                         
  SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`invoiceninja`.`#sq  
  l-418_46`, CONSTRAINT `payments_invoice_id_foreign` FOREIGN KEY (`invoice_id`) REFERENCES `invoices` (`id`) ON DELETE CASCADE) (SQL: alter   
  table `payments` add constraint `payments_invoice_id_foreign` foreign key (`invoice_id`) references `invoices` (`id`) on delete cascade)     



  [PDOException]                                                                                                                               
  SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`invoiceninja`.`#sq  
  l-418_46`, CONSTRAINT `payments_invoice_id_foreign` FOREIGN KEY (`invoice_id`) REFERENCES `invoices` (`id`) ON DELETE CASCADE)       

有人能帮我吗?

EN

回答 2

Stack Overflow用户

发布于 2016-04-19 18:44:27

我假设您正在运行down方法。第一行:

代码语言:javascript
复制
$table->unsignedInteger('invoice_id')->index();

添加回列,我不知道Laravel,但我猜这会为该列分配一个默认值0

代码语言:javascript
复制
$table->foreign('invoice_id')->references('id')->on('invoices')->onDelete('cascade');

如果引用的id列中没有0值,则会失败。

您可能可以通过允许invoice_id列为NULL并将其用作默认值来实现这一点。

我的第一步是检查新添加的列invoice_id中的值。

票数 0
EN

Stack Overflow用户

发布于 2016-04-19 18:45:59

我不确定为什么在down()方法中有这个逻辑,因为它通常是在up()中,但请尝试这样做:

代码语言:javascript
复制
public function down()
{
    Schema::table('payments', function (Blueprint $table){
        $table->unsignedInteger('invoice_id')->index();
    });

    Schema::table('payments', function (Blueprint $table){
        $table->foreign('invoice_id')->references('id')->on('invoices')->onDelete('cascade');
    });
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36715678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档