如何在 Laravel 5.1 完整性约束违规中添加外键:1452?

Posted

技术标签:

【中文标题】如何在 Laravel 5.1 完整性约束违规中添加外键:1452?【英文标题】:How to add foreign key in Laravel 5.1 Integrity constraint violation: 1452? 【发布时间】:2017-02-28 14:47:18 【问题描述】:

我正在向 Tickets 表添加外键。另一个表是 ticket_statuses

在 artisan 中,我执行了这个命令:php artisan make:migration add_ticket_status_to_tickets_table

这是迁移文件中的代码:

      class AddTicketStatusToTicketsTable extends Migration
    
        /**
         * Run the migrations.
         *
         * @return void
         */
        public function up()
        

            Schema::table('tickets', function ($table) 
                $table->integer('ticket_status_id')->unsigned();
                $table->foreign('ticket_status_id')->references('id')->on('ticket_statuses')->onDelete('cascade');
            );

        
     

之后,我尝试建立关系。这是我在 Tickets Model 中的代码:

class Ticket extends Model


    // Ticket __belongs_to__ Ticket Status
    public function ticket_status()
    
        return $this->belongsTo('App\TicketStatus');
    

在 artisan 中,我执行了 php artisan migrate 但我遇到错误

[Illuminate\Database\QueryException]
  SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`idealcrmalphadb`.`#sql-4ea_1ce`, CONSTRAINT `tickets_ticket_status_id_foreign` FOREIGN KEY (`ticket_status_id`) REFERENCES `tickets` (`id`) ON DELETE CASCADE) (SQL: alter table `tickets` add constraint tickets_ticket_status_id_foreign foreignkey (`ticket_status_id`) references `tickets` (`id`) on delete cascade)

 [PDOException]
  SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`idealcrmalphadb`.`#sql-4ea_1ce`, CONSTRAINT `tickets_ticket_status_id_foreign` FOREIGN KEY (`ticket_status_id`) REFERENCES `tickets` (`id`) ON DELETE CASCADE)

我在模型部分犯了错误吗?请帮忙

【问题讨论】:

你确定是on('tickets')?您可能有另一个用于工单状态的表。像ticket_statuses 这样的东西。如果是这种情况,请将 on('tickets') 更改为 on('ticket_statuses') 或任何您的工单状态表的名称。 嗨@Doom5。我有一个 ticket_statuses 表。 $table->foreign('ticket_status_id')->references('id')->on('ticket_statuses') 【参考方案1】:

检查您的迁移表名称和参考表名称。你这里有错误。

更新:

您的门票表中似乎已有数据。如果是这样,您可以立即尝试

$table->integer('ticket_status_id')->unsigned()->nullable();

【讨论】:

我已经检查了迁移和引用表名。看起来是正确的。 您的tickets 表中似乎已有数据。如果是这样,您现在可以尝试$table->integer('ticket_status_id')->unsigned()->nullable();

以上是关于如何在 Laravel 5.1 完整性约束违规中添加外键:1452?的主要内容,如果未能解决你的问题,请参考以下文章

SQLSTATE [23000]:完整性约束违规:1048 laravel 5.7

Laravel 关于删除完整性约束违规:1451 无法删除或更新父行:外键约束失败

SQLSTATE[23000]:Laravel 中的完整性约束违规

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

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

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