首页 > 解决方案 > 为年龄计算创建一个 cron 作业

问题描述

我使用命令创建了一个名为“cronAge”的年龄计算 cronjob

php artisan make:command cronAge 

以下是我的员工模型:

class Employee extends Model
{
    protected $primaryKey = 'tag_no';    
    public $incrementing = false;

    protected $fillable = [        
        'tag_no',
        'emp_type', 
        'age',            
        'date_of_birth',                   
    ];  
}

我打算每月给 cronjob 打电话。

protected function schedule(Schedule $schedule)
    {
       $schedule->command('cronAge')
                 ->monthly();
    }

这是我的功能:它不是工作代码。它只显示了计算年龄的逻辑。

public function handle()
    {
        $emp= new Employee();
        $today = new Date();
        $birth_day = $emp->date_of_birth;
        if ($today.getFullYear() - $birth_day.getFullYear() == 1) {
            if ($today.getMonth() == $birth_day.getMonth()
               && $today.getDate() == $birth_day.getDate()) {            
                $emp->age = $emp->age+1;
            }
        }
    }

那么如何在函数中实现我的逻辑。是逻辑仪式吗?请帮助我。我是这个 cronjob 主题的新手,我不知道。

标签: phplaravel-5cron

解决方案


我找到了解决方案。最好的方法是使用 Carbon 库解析 date_of_birth 字段来计算年龄。代码如下。

class Employee extends Model
{
    protected $primaryKey = 'tag_no';    
    public $incrementing = false;    
    protected $fillable = [        
        'tag_no',
        'emp_type',        
        'date_of_birth',         
    ]; 

    public function getAgeAttribute()
    {
        return Carbon::parse($this->attributes['date_of_birth'])->age; 
    }

}

我们也不需要表中的年龄字段。我们可以使用 Carbon 库查找年龄。

如果$emp是传递给您的view.blade.php的变量,则可以使用以下方式显示年龄:

{{ $emp->age }} 

这样就可以做到了。


推荐阅读