اذهب إلى المحتوى

السؤال

نشر

أقوم بعمل نظام الحضور. أريد حساب إجمالي الساعات من وقت لآخر وعرضها في عمود إجمالي الساعات. لقد جربت هذا الكود ولكن لا يعمل. أنا أفعل هذا في نموذج User 

public function total()
{
    $now = $this->freshTimestamp();

    return $this->employeeAttendance()
                ->where('date', Carbon::now('Asia/Manila')->toDateString())
                ->whereNull('total')
                ->firstOrFail()
                ->update([
                    'timeOut' => DB::table('attendance')->where('id')->sum(DB::raw('timeIn - timeOut')),
                ]);
}

Time In

public function timeIn()
{
    $now = $this->freshTimestamp();

    return $this->employeeAttendance()->create([
        'name' => auth()->user()->name,
        'date' => Carbon::now('Asia/Manila')->toDateString(),
        'timeIn' => Carbon::now('Asia/Manila')->format('H:i:s'),
    ]);
}

Time Out 

public function timeOut()
{
    $now = $this->freshTimestamp();

    return $this->employeeAttendance()
                ->where('date', Carbon::now('Asia/Manila')->toDateString())
                ->whereNull('timeOut')
                ->firstOrFail()
                ->update([
                    'timeOut' => Carbon::now('Asia/Manila')->format('H:i:s'),
                ]);
}

المتحكم

public function store(Request $request)
{
    $request->user()->timeIn();

    return back();
}

public function update(Request $request)
{
    $request->user()->timeOut();

    return back();
}

 

Recommended Posts

  • 0
نشر

بداية يجب ان يتم الlogic داخل المتحكم وليس الmodel

فهذا افضل بكثير

1- في لارفل عند مقارنة تاريخين لا نستعمل where ولكن نستعمل whereDate

2- 

<?php
use Carbon\Carbon;
$current_timestamp = Carbon::now()->timestamp; // Produces something like 1552296328
//بدلا من freshTimestamp

3- لم أجد استعداء لميثود total والتي تحسب اساسا القيم التي تريدها

فانت في ميثود store تستدعي ميثود timeIn هنا تم حفظ وقت الدخول

وفي ميثود update تستدعي ميثود timeOut هنا تم حفظ وقت الخروج

لا يوجد استدعاء للميثود total لانها هي من تنفذ عملية حساب الوقت الاجمالي للحضور

يمكنك استخدام ميثود total بطريقيتن

  1. عمل route ينفذ الميثود 
    <?php
    Route::get("/calcTotal",function(Request $req){
      $req->user()->total()
    });
  2. او استخدام الevents, عند تحديث الtimeOut يتم تنفيذ ميثود total تلقائيا, وهذا رابط من شرح لارفل يشرح كيفية استخدام الEvents داخل الModels 

https://laravel.com/docs/10.x/eloquent#events

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...