Laravel 10中软删除记录仍被查询出的问题求助
问题解决方法
1. 确认SoftDeletes命名空间已导入
你的Category模型代码里仅写了use SoftDeletes;,但如果未导入对应的命名空间,这个trait不会生效。在模型顶部补充命名空间导入:
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; class Category extends Model { use SoftDeletes; protected $fillable = [ 'name', 'slug', 'description', 'is_active', 'image', ]; }
2. 排查是否移除了软删除全局作用域
检查模型的boot方法,若存在移除默认软删除作用域的代码,会导致查询不过滤已软删记录。比如以下代码需要删除:
protected static function boot() { parent::boot(); // 移除这行:static::withoutGlobalScope(\Illuminate\Database\Eloquent\SoftDeletingScope::class); }
3. 清除应用缓存
缓存可能导致模型变更未生效,执行命令清空缓存:
php artisan optimize:clear
4. 二次确认数据库字段结构
虽然你提到软删除时deleted_at字段能正确赋值,仍建议确认categories表的deleted_at字段类型为timestamp且允许为空,确保字段结构符合要求。
完成以上步骤后,重新执行Category::latest('id')->paginate(20),查询会自动带上where deleted_at is null的过滤条件。
内容的提问来源于stack exchange,提问作者Nafis Chonchol
相关产品推荐
相关产品推荐

