在Laravel Nova中实现Offer模型按年月分组的聚合数据展示是否可行?
实现方案说明
完全可以在Nova中直接实现该聚合展示效果,不需要仅依赖导出报表功能,主流实现方式有两种,可根据你的实际需求选择:
方案一:使用Nova原生Lens实现(推荐,符合原生开发规范)
Lens是Nova专门提供的自定义数据视图能力,改动成本最低:
- 第一步:生成Lens文件,执行命令:
php artisan nova:lens OfferMonthlyAggregation - 第二步:修改Lens文件内的
query方法,写入分组聚合逻辑,示例代码参考:
public function query(Request $request, $query) { // 可根据业务需求调整聚合字段,比如统计Offer数量、总金额、平均金额等 return $query->selectRaw('YEAR(created_at) as year, MONTH(created_at) as month, COUNT(id) as offer_total, SUM(amount) as amount_total') ->groupBy('year', 'month') ->orderBy('year', 'desc') ->orderBy('month', 'desc'); }
- 第三步:修改
fields方法定义要展示的聚合列:
public function fields(Request $request) { return [ Text::make('年份', 'year'), Text::make('月份', 'month'), Number::make('Offer总数', 'offer_total'), Currency::make('总金额', 'amount_total'), ]; }
- 第四步:将该Lens注册到Offer Resource的
lenses方法中,即可在Offer Resource的导航栏看到聚合视图入口,点击后展示的就是按年月分组的聚合数据,同时支持Nova原生的排序、筛选等能力。
方案二:自定义Nova卡片/工具实现(适合需要完全匹配参考图折叠效果)
如果你需要参考图中按年折叠、点击展开查看月度数据的交互效果,可以自定义Nova卡片,写简单的Vue组件渲染数据,灵活度最高,可以1:1还原你要的展示效果。如果不想自己开发前端,也可以用Nova社区的分组列表扩展包实现折叠交互。
内容的提问来源于stack exchange,提问作者Sonal
相关产品推荐
相关产品推荐

