Laravel消息:完整性约束冲突:1451



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

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

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

还有一个喜欢迁移的帽子看起来像这样:

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...."

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

谁能提供建议?

亲切问候

休 伯特

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

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

可以采用较新版本的删除级联。

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

是一个正确的辅助方法(这是其他人建议的->onUpdate('cascade')的替代品(,但看起来你忘记了括号。如果将其更正为以下内容,它应该可以工作:

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']);
});
}

最新更新