Laravel 5.8中forceDelete无法彻底删除模型问题咨询
Laravel 5.8 forceDelete 未彻底删除记录问题排查
这绝对不是forceDelete方法的正常表现,Laravel中forceDelete()的设计目标就是彻底移除软删除模型对应的数据库记录,出现你描述的情况肯定是代码逻辑存在问题,以下是常见排查方向:
1. 模型的forceDelete方法被自定义重写
这是最可能的原因。检查你的Contact模型,是否手动重写了forceDelete方法,把原本的删除逻辑改成了仅更新字段的操作,比如:
public function forceDelete() { $this->update(['deleted_by' => auth()->id()]); return true; }
这种写法会导致调用forceDelete()时仅更新deleted_by字段,不会删除记录,且返回true,完全匹配你遇到的现象。
2. 模型观察者或全局Scope干扰
- 检查是否为
Contact模型注册了模型观察者,在forceDeleted事件中执行了阻止删除、修改操作逻辑的代码; - 查看模型是否添加了全局Scope,强制给删除语句附加了额外条件,导致实际执行的DELETE语句未匹配到目标记录(但模型实例方法仍返回
true)。
3. 临时排查技巧:查看实际执行的SQL
可以通过打印SQL日志,确认forceDelete()实际执行的语句:
DB::enableQueryLog(); $model->forceDelete(); dd(DB::getQueryLog());
如果输出的是UPDATE语句而非DELETE语句,直接就能定位到逻辑篡改的问题。
4. 确认软删除特性的基础配置
虽然你软删除功能正常,但可以再确认模型是否正确引入了SoftDeletes trait:
use Illuminate\Database\Eloquent\SoftDeletes; class Contact extends Model { use SoftDeletes; // ...其他配置 }
内容的提问来源于stack exchange,提问作者Mohammad Al Hallaq
相关产品推荐
相关产品推荐

