Что ж, вы просто используете Carbon\Carbon
в сочетании с аксессорами для этой проблемы, например так:
Предполагается, что вы напишите что-то подобное в своем 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;
}
Я не тестировал приведенный выше код, поэтому он может не сработать с самого начала, но вы поняли идею.