Laravel: я хочу рассчитать общее время для punchin и punch out и генерировать общее время - PullRequest
0 голосов
/ 12 марта 2019

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 голосов
/ 12 марта 2019

Что ж, вы просто используете 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;
}

Я не тестировал приведенный выше код, поэтому он может не сработать с самого начала, но вы поняли идею.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...