首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >总休假-如何更新特定用户在leave_balances表中的总休假

总休假-如何更新特定用户在leave_balances表中的总休假
EN

Stack Overflow用户
提问于 2022-06-08 04:52:59
回答 1查看 44关注 0票数 0

我在休假模型中创建了一个名为getSumOfLeaveTaken()的方法,以总结休假模型中显示的特定用户休假所需的天数,并在控制器中调用这些方法以保存leave_balances表中休假的总和。我的leave_balance表旨在保存每个leave_category和特定用户的休假之和。当我申请休假2天时,2天的假期被保存在leave_balance表中,然后再申请3天的假期,total_leave_taken被更新并汇总为5 total_leave_taken。

如果另一个用户申请2天,则该用户的total_leave_taken为7天。

我坚持如何使这个问题正确,因为2天的假期变成了7天的总休假。有人能帮忙吗?

代码语言:javascript
复制
    <?php

    namespace App\Models;
    use App\Models\Leave;
    use DB;
    use Illuminate\Support\Facades\Auth;
    use Illuminate\Database\Eloquent\Factories\HasFactory;
    use Illuminate\Database\Eloquent\Model;

    class Leave extends Model
    {
        use HasFactory;

        protected $table = 'leaves';

        protected $fillable = [

                    'created_by', 
                    'leave_category_id',
                    'start_date', 
                    'end_date',
                    'num_days', 
                    'reason',
                    'publication_status',
                    'deletion_status',
        ];

        public static function getSumOfLeaveTaken(){
            
            $leavebalance = Leave::where('leave_category_id',1)->where('created_by',$userId = Auth::user()->id)->first()->sum('num_days');

            return $leavebalance;
        }



      }

我的商店方法

代码语言:javascript
复制
public function store(Request $request) {
    
    $sdates = date("D", strtotime($request->start_date));
    $edates = date("D", strtotime($request->end_date));
    
    $leave_application = $this->validate($request, [
        'leave_category_id' => 'required',
        'start_date' => 'required',
        'end_date' => 'required',
    ]);

    $start_date = Carbon::parse(request('start_date'));
    $end_date = Carbon::parse(request('end_date'));

    $days = $start_date->diffInWeekdays($end_date);

    $weekly_holidays = WorkingDay::where('working_status', 0)
        ->get(['day'])
        ->toArray();

        if($weekly_holidays != null){

            foreach ($weekly_holidays as $weekly_holiday) {
                if ($sdates == $weekly_holiday['day'] || $edates == $weekly_holiday['day']) {
                    return redirect()->route('leave.index')->with('exception', 'You select a holiday !');
                }               
               }                
        }

        $monthly_holidays = Holiday::where('holiday_date', '=', $request->start_date)
        ->first(['holiday_date']);
        
        
   if($monthly_holidays == null){
    
    $result = Leave::create($leave_application +['num_days' => $days] +['reason' =>request('reason')] + ['created_by' => auth()->user()->id]);
    
  
    $rds = LeaveBalance::where('leave_category_id',$request->leave_category_id)->where('created_by',$userId = Auth::user()->id)->first();
    
    if(!isset($rds)){

    $carbon = Carbon::now();
    $nowInTarawa = Carbon::now('Pacific/Tarawa');
    $year = $nowInTarawa->format('Y');
    $yearIntvalue = intval($year);
    $leave_balance = new LeaveBalance();
    $leave_balance->leave_category_id = $request->leave_category_id;
    $leave_balance->created_by = $userId = Auth::user()->id;
    $leave_balance->year = $yearIntvalue;
    $leave_balance->total_leave_taken = $leaves = Leave::getSumOfLeaveTaken($request->leave_category_id);
    $leave_balance->save();

}else

    {
        $leaves = Leave::getSumOfLeaveTaken($request->leave_category_id);
        LeaveBalance::where('created_by', $userId)->where('leave_category_id',$request->leave_category_id)
        ->update(['total_leave_taken' => $leaves]);

    }

    $inserted_id = $result->id;

    if (!empty($inserted_id)) {
        return redirect()->route('leave.index')->with('message', 'Add successfully.');
    }
    return redirect()->route('leave.index')->with('exception', 'Operation failed !');

   }

   
   if($monthly_holidays != null){
                return redirect()->route('leave.index')->with('exception', 'You select a holiday !');
    }
        
}
EN

回答 1

Stack Overflow用户

发布于 2022-06-08 22:39:21

解决了:是帮助我解决这个问题的链接,在这里可以找到Laravel - sum of current user

我只是将我的getSumOfLeaveTaken()逻辑更改为并能够对特定用户的休假进行求和。

代码语言:javascript
复制
    public static function getNumOfLeaveTaken($leave_category_id){
            
             $leavebalance  = DB::table('leaves')
            ->where('created_by', \Auth::user()->id)
            ->where('leave_category_id', $leave_category_id)
            ->sum('num_days');


            return $leavebalance;
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72540218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档