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

Laravel 7如何实现每月首日自动累加用户表leave_earn字段值

每月自动累加用户年假额度实现方案

核心需求

  • 每月首日自动执行逻辑,给用户表所有配置了年度年假配额的记录,将单月可累计的年假额度累加到leave_earn字段
  • 单月累计年假额度计算规则:用户年度总年假配额leave_alloc除以12
  • leave_earn字段支持存储负数、小数值,无需额外做字段类型调整

用户表(Users Table)结构

idleave_alloc(年度年假配额)leave_earn(累计已得年假)
1200
2201.5
320-3
4204

现有业务代码

当前已经编写的控制器方法逻辑如下:

public function earned_leave(){
  $user = User::where('leave_alloc', '!=', null)->get();
  foreach($user as $row){
    $leave_alloc = $row->leave_alloc;
    $earned_leave = $leave_alloc / 12;
    $row->leave_earn += $earned_leave;
    $row->save();
  }
}

代码优化提示:上述循环逐条查询、更新、保存的写法在用户量较大时会产生大量数据库IO,性能较差。可直接替换为批量更新SQL,一次操作完成所有符合条件记录的字段累加:

// 优化后批量更新逻辑,无需循环遍历
User::whereNotNull('leave_alloc')
    ->update([
        'leave_earn' => \DB::raw('leave_earn + leave_alloc / 12')
    ]);

自动化执行配置步骤

从代码写法判断当前使用的是Laravel框架,优先使用框架内置的任务调度能力实现月度自动执行,步骤如下:

  • 第一步:配置服务器Crontab定时任务入口
    登录服务器编辑crontab配置,添加以下条目,让系统每分钟调用一次Laravel的调度执行器:
    * * * * * cd /你的项目实际部署根目录 && php artisan schedule:run >> /dev/null 2>&1
    
  • 第二步:注册月度执行任务
    打开项目下app/Console/Kernel.php文件,在schedule方法中添加月度执行的任务,配置为每月1日0点触发年假累加逻辑:
    protected function schedule(Schedule $schedule)
    {
        // 每月首日0点执行年假额度累加
        $schedule->call(function () {
            User::whereNotNull('leave_alloc')
                ->update([
                    'leave_earn' => \DB::raw('leave_earn + leave_alloc / 12')
                ]);
        })
        ->monthlyOn(1, '00:00') // 指定每月1日0点执行
        ->withoutOverlapping() // 加锁防止任务重复触发执行
        ->onFailure(function () {
            // 可选:可在这里配置任务执行失败后的告警逻辑,比如发邮件、发内部群通知
        });
    }
    
  • 轻量备选方案
    如果不想修改框架内的调度配置,也可以直接在服务器Crontab中写死月度执行规则,直接执行更新逻辑,无需走框架调度入口:
    # 每月1日0点1分执行年假额度更新,路径替换为项目实际部署路径
    1 0 1 * * cd /你的项目实际部署根目录 && php artisan tinker --execute="App\Models\User::whereNotNull('leave_alloc')->update(['leave_earn' => \DB::raw('leave_earn + leave_alloc/12')]);"
    

内容的提问来源于stack exchange,提问作者Shan Md Shazarul Haque 171-15-

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 12:18:18