Laravel:我想计算打卡和打卡的总时间,并产生总时间

时间:2019-03-12 11:52:17

标签: sql database laravel vue.js

enter image description here

这是我的数据库,我想计算每个 punch_in punch_out 之间的时差,并计算每天的总时间。

    $punch = punches::where('user_id','=',$user->id )->whereDate('created_at', '=', Carbon::today()->toDateString())->get();       
    $punch_in = punches::where('user_id','=',$user->id )->whereDate('created_at', '=', Carbon::today()->toDateString())->where('punch_in','!=',null)->get(); 
    $punch_out = punches::where('user_id','=',$user->id )->whereDate('created_at', '=', Carbon::today()->toDateString())->where('punch_out','!=',null)->get(); 

这是我一直在使用的查询,对此有任何建议

1 个答案:

答案 0 :(得分:0)

对于这个问题,您只需结合使用Carbon\CarbonAccessors,就像这样:

假设您在App\Punch模型中编写了以下内容:

protected $dates = [
    'punch_in', 
    'punch_out'
];

public function user(): BelongsTo
{
    return $this->belongsTo(User::class);
}

public function getTimingAttribute(): int
{
   if ($this->punch_out) {
       return $this->punch_out->diffInSeconds($this->punch_in);
   }
   return 0;
}

然后在您的App\User模型中:

public function punches(): HasMany
{
    return $this->hasMany(Punch::class);
}


public function getTotalTimingAttribute(): int
{
     return $this->punches ? $this->punches->reduce(function ($total, Punch $punch) {
         return $total + $punch->timing;
     }, 0) : 0;
}

在您的App\Http\Controllers\User控制器中,您将获得如下信息:

public function totalTiming(User $user)
{
    return $user->totalTiming;
}

我没有测试上面的代码,因此一开始可能无法正常工作,但是您明白了。