You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Nova 4软删除报错:Column not found:1054 未知列'*.deleted_at'

解决Laravel Nova启用软删除时Column not found: 1054 Unknown column '*.deleted_at'错误

排查与修复步骤

  • 确认迁移已实际执行
    即便你在迁移文件中添加了$table->softDeletes();,也可能存在迁移未真正运行的情况。可以针对users表重新执行迁移(注意:migrate:refresh会清空表数据,操作前请备份):

    # 针对users表的迁移文件单独刷新
    php artisan migrate:refresh --path=/database/migrations/[你的users表迁移文件名].php
    # 如果是新增的软删除字段迁移,直接运行所有未执行的迁移
    php artisan migrate
    

    执行完成后,用数据库客户端查看users表结构,确认deleted_at列(timestamp类型、允许null)确实存在。

  • 清除Laravel全量缓存
    Laravel的配置、模型元数据等缓存可能导致系统读取旧的表结构,执行以下命令清空所有缓存:

    php artisan cache:clear
    php artisan config:clear
    php artisan route:clear
    php artisan view:clear
    php artisan optimize:clear
    
  • 检查Nova资源的自定义查询逻辑
    打开对应的Nova资源文件(比如app/Nova/User.php),排查是否有自定义的indexQuery、detailQuery等方法,这些方法如果错误覆盖了模型的查询作用域,或者手动添加了deleted_at的条件但表中无此列,就会触发错误。确保资源没有移除软删除的全局作用域,也没有手动构造错误的查询条件。

  • 理解PhpStorm查询的特殊情况
    你在PhpStorm中执行查询时提示无列但能正常运行,是因为MySQL的特性:当WHERE子句中引用不存在的列并判断is null时,MySQL会将其解析为null is null(恒成立),所以查询能执行。但Laravel的查询构建器会严格校验数据库表的列存在性,因此抛出错误——这也说明你的表中确实不存在deleted_at列,核心问题还是迁移未正确执行。

  • 再次验证模型的软删除配置
    确认User模型中正确引入了SoftDeletes trait,无拼写错误:

    use Illuminate\Database\Eloquent\SoftDeletes;
    
    class User extends Authenticatable
    {
        use SoftDeletes;
    
        // 其他模型代码
    }
    

    Laravel 10中使用该trait会自动将deleted_at加入日期字段列表,无需手动在$dates属性中添加。

内容的提问来源于stack exchange,提问作者Hopex Development

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 03:20:09