首页 > 解决方案 > Laravel 消息:违反完整性约束:1451

问题描述

我仍在学习 Laravel,当我想从数据库中删除记录时遇到了问题。很可能我错过了一些简单的东西。

我有一个如下所示的推文迁移:

    public function up()
{
    Schema::create('tweets', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->foreignId('user_id');
        $table->string('body');
        $table->timestamps();
    });
}

还有一个likes-migration hat,看起来是这样的:

    public function up()
{
    Schema::create('likes', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->foreignId('user_id')->constrained()->cascadeOnDelete;
        $table->foreignId('tweet_id')->constrained()->cascadeOnDelete;
        $table->boolean('liked');
        $table->timestamps();

        $table->unique(['user_id', 'tweet_id']);
    });
}

当我在修补匠时说

$tweet->delete();

只有当它没有喜欢时,它才会删除推文记录。如果推文有喜欢,我会收到错误消息:

Illuminate/Database/QueryException with message 'SQLSTATE[23000]: Integrity constraint violation : 1451 Cannot delete or update a parrent row: a foreign key constraint fails...."

我认为我在迁移过程中犯了一个非常基本的错误,但我不知道是哪个。

谁能给点建议?

亲切的问候,

休伯特

标签: databaselaravel

解决方案


当您删除具有与之关联的外键的模型时,您必须进行清理。你想级联它,你的语法似乎不对,我不确定它是否是另一种方式。通常你会这样做。

$table->foreign('user_id')
    ->references('id')->on('users')
    ->onDelete('cascade');

$table->foreign('tweet_id')
    ->references('id')->on('tweets')
    ->onDelete('cascade');

更新版本的 on delete 级联可以。

$table->foreignId('user_id')
    ->constrained()
    ->onDelete('cascade');

推荐阅读