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

基于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:38:51