选Nova还是Filament取决于付费意愿、前端能力与稳定性需求:Nova是闭源商业方案,需先购许可证(单项目99美元)并配置私有仓库认证才能安装;Filament是开源Livewire方案,必须严格匹配Laravel 11+/PHP 8.2+(v5)或Laravel 10.48+(v4),且安装后须执行filament:install --panels并正确实现模型契约与资源关系。

选 Nova 还是 Filament,取决于你有没有付费意愿、团队前端能力、以及是否需要长期强稳定性——Nova 是闭源商业方案,Filament 是开源 Livewire 方案;没买 Nova 许可证就别试,Filament 则必须严格对齐 Laravel 和 PHP 版本才能装上。
安装 Nova 必须先买许可证,否则 php artisan nova:install 会报 403
Nova 不提供免费试用或社区版,composer require laravel/nova 会直接失败,因为包托管在私有仓库。你得先去 https://nova.laravel.com 注册账号、选择许可证(单项目 $99 或无限项目 $299),拿到 license key 后,再配置 Composer 的 auth:
- 运行
composer config http-basic Nova.laravel.com your-email@example.com your-license-key - 再执行
composer require laravel/nova,否则提示Could not fetch packages: 403 Forbidden -
php artisan nova:install之后,必须手动在app/Providers/NovaServiceProvider.php的boot()方法里加Nova::userMenu()或自定义菜单逻辑,否则右上角用户菜单为空 - 如果
config/nova.php中的'guard' => 'web'和你项目实际守卫不一致(比如用了'admin'),登录页会无限重定向——检查config/auth.php里的默认守卫名是否匹配
Filament 安装失败九成是因为 Laravel 版本和 illuminate/support 冲突
Filament v5(2026 年主推版本)只支持 Laravel 11.0+ 和 PHP 8.2+;v4 支持 Laravel 10.48+,但如果你用的是 Laravel 10.42,composer require filament/filament:^5.0 必然报错。正确做法是查清版本再锁死:
- 运行
php artisan --version确认 Laravel 版本,再查 Filament 官方兼容表(2026 年 4 月起已不再维护 v3) - Laravel 10.42 → 用
composer require filament/filament:"^4.5",别加@latest - 装完必须立刻跑
php artisan filament:install --panels,它会生成app/Providers/Filament/AdminPanelProvider.php并注册进config/app.php;漏掉这步,后续所有make:filament-*命令都会报Class "App\Providers\Filament\AdminPanelProvider" not found - 如果已装错,先
composer remove filament/filament,删掉vendor/filament和bootstrap/cache/config.php,再重装
Filament 资源字段不显示、列表空白,大概率是模型没实现契约或字段名写错
Filament 不会自动猜模型字段,TextColumn::make('name') 要求模型必须有 $fillable = ['name'] 或访问器 getNameAttribute(),否则报 Undefined array key "name":
- 在模型里补上
use FilamentPanelTraitsHasFilamentTableColumns;(v4/v5 都要) -
getRelations()不生效?检查 Resource 类里是否显式写了BelongsToSelect::make('user_id')->relationship('user', 'name'),且模型中user()关系方法返回$this->belongsTo(User::class) - 编辑页保存失败无提示?常见原因是数据库有
deleted_at字段但模型没启用软删除——要么加use SoftDeletes;,要么在 form() 里加Hidden::make('deleted_at') - 表格搜索失效?确保
getTableSearchableColumns()返回的字段都在getTableModel()->getFillables()或数据库索引里,否则 MySQL 全表扫描超时
Nova Resource 放错路径或 indexQuery() 没预加载,列表直接卡死
Nova 只扫描 app/Nova 目录,文件名和类名必须完全一致(大小写敏感),app/Nova/Post.php 里类必须叫 Post,不能是 BlogPost 或 post:
- 关联字段如
Text::make('Author', 'user.name')必须在indexQuery()里加with('user'),否则 N+1 查询让页面加载十几秒甚至 500 - 下拉搜索框(
BelongsTo::make('Category')->searchable())不设relatableQuery(),搜索时会扫全表,超时或崩溃 - 侧边栏不显示资源?检查
app/Nova/Post.php是否继承Nova\Resource,且model()方法返回了正确的类名字符串,比如return Post::class; - 字段值用闭包(如状态标签)不可搜索、不可排序,只能用于展示——这是设计使然,不是 bug
真正难的不是装上,而是理解 Nova 的查询生命周期和 Filament 的契约注入机制;跳过 indexQuery() 或漏掉 HasFilamentTableColumns,表面能进后台,一操作就崩,这种问题不会报错,只会静默失败。


















