基于Laravel关联查询统计不同休假政策的申请次数
嘿,我来帮你补全这个Laravel查询,完美实现按休假政策名称统计「已申请」次数的需求~
完整的关联查询实现
结合你给出的代码片段和数据库结构,我调整并补全了查询逻辑,确保能准确统计各政策的已申请次数:
// 引入Carbon(如果需要筛选至今的记录) use Carbon\Carbon; // 执行关联查询统计 $policyStats = DB::table('leaves') // 关联休假政策主表,确保统计的是合法政策 ->join('leaves_policies', 'leaves.leave_policy', '=', 'leaves_policies.title') // 筛选「已申请」状态的记录(根据你的实际状态字段调整值) ->where('leaves.status', '=', '已申请') // 可选:筛选至今的申请记录(如果需要严格限定时间范围) ->where('leaves.created_at', '<=', Carbon::now()) // 按政策名称分组 ->groupBy('leaves_policies.title') // 取政策名称并统计申请次数 ->select( 'leaves_policies.title as policy_name', DB::raw('COUNT(*) as application_count') ) ->get();
代码逻辑说明
- 关联表:通过
leaves(申请记录表)的leave_policy字段关联leaves_policies(政策主表)的title字段,确保我们统计的是系统内已定义的合法政策。 - 筛选条件:
where('leaves.status', '已申请')精准定位到「已申请」区域的记录,你可以根据实际数据库的状态值(比如数字枚举)调整这个条件。 - 分组统计:
groupBy按政策名称分组,配合COUNT(*)统计每组的申请次数,最后通过select返回友好的字段别名方便后续使用。
在视图中展示结果
拿到统计结果后,你可以在Blade模板里这样渲染「已申请」区域的统计:
<div class="applied-leaves-section"> <h4>已申请休假统计</h4> <div class="stats-list"> @foreach($policyStats as $stat) <p>*{{ $stat->policy_name }}*:{{ $stat->application_count }}次</p> @endforeach </div> </div>
额外注意事项
- 如果你的数据库是用ID关联政策(更规范的设计),比如
leaves表存policy_id,leaves_policies表有id字段,记得把join条件改成:->join('leaves_policies', 'leaves.policy_id', '=', 'leaves_policies.id') - 如果不需要限制时间范围,可以去掉Carbon相关的筛选条件。
内容的提问来源于stack exchange,提问作者Faiez
相关产品推荐
相关产品推荐

