这是我的数据库,我想计算每个 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();
这是我一直在使用的查询,对此有任何建议
答案 0 :(得分:0)
对于这个问题,您只需结合使用Carbon\Carbon
和Accessors,就像这样:
假设您在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;
}
我没有测试上面的代码,因此一开始可能无法正常工作,但是您明白了。