database - 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...."
我认为我在迁移过程中犯了一个非常基本的错误,但我不知道是哪个。
谁能给点建议?
亲切的问候,
休伯特
解决方案
当您删除具有与之关联的外键的模型时,您必须进行清理。你想级联它,你的语法似乎不对,我不确定它是否是另一种方式。通常你会这样做。
$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');
推荐阅读
- css - 如何让过滤器在嵌套的 SVG 上工作?
- twilio - Twilio 无法验证来自 webhook 的请求
- django - 在 django 中使用 Bootstrap 时出错
- c++ - 我写了一个自定义的 caffe 层。但是在训练期间它说“**层不需要反向计算”
- python - 出现“没有这样的列:credit_limit”错误
- asp.net-core - azure 应用服务中的 Kestrel 地址绑定错误
- html - 使 CSS 动画不重启
- sql - 在 SQL 中使用分区子句时为序列分配 ID
- java - 如何修改将 .xls 导出到 xssfworkbook
- c# - 我在加载保存位置上的玩家角色掉在了盒子上