Laravel如何筛选指定年份的工单统计数据并展示?
实现Laravel工单统计仅展示特定年份的方法
方法一:控制器层面过滤(推荐,减少数据查询量)
直接在数据库查询阶段添加年份过滤条件,只获取目标年份的数据,性能更优:
固定年份过滤
比如要展示2024年的统计数据:
$targetYear = 2024; $test = DB::table('tickets') ->selectRaw('YEAR(created_at) as anno, MONTH(created_at) as mese, count(id) as totale') ->whereYear('created_at', $targetYear) // 添加年份过滤条件 ->groupBy('anno', 'mese') ->get();
动态年份过滤
如果需要根据请求参数动态切换年份(比如URL传参?year=2024):
// 默认展示当前年份,可通过请求参数覆盖 $targetYear = request()->input('year', date('Y')); $test = DB::table('tickets') ->selectRaw('YEAR(created_at) as anno, MONTH(created_at) as mese, count(id) as totale') ->whereYear('created_at', $targetYear) ->groupBy('anno', 'mese') ->get();
方法二:视图层面过滤(临时场景使用)
如果不想修改控制器代码,可在Blade视图中通过条件判断过滤年份:
<table> <tbody> @php \Carbon\Carbon::setLocale('it'); // 移到循环外,避免重复执行 @endphp @foreach($test as $tes) {{-- 只渲染目标年份的数据,这里以2024为例 --}} @if($tes->anno == 2024) <tr> <td>{{$tes->anno}}</td> <td>{{\Carbon\Carbon::createFromFormat('m',$tes->mese)->translatedFormat('F')}}</td> <td>{{$tes->totale}}</td> </tr> @endif @endforeach </tbody> </table>
额外优化建议
把Carbon语言设置移到全局配置,避免在视图中重复执行:
在app/Providers/AppServiceProvider.php的boot方法中添加:
use Carbon\Carbon; public function boot() { Carbon::setLocale('it'); }
之后视图里就不需要再写\Carbon\Carbon::setLocale('it');了。
内容的提问来源于stack exchange,提问作者Marco
相关产品推荐
相关产品推荐

