首页 > 解决方案 > 批准请假时扣除总假期

问题描述

我在表用户和列天数中的总休假和表休假中的状态。我试图用批准休假但未更新的休假天数来扣除总休假。我试过这个代码。

该功能是供申请人申请休假的。

public function store(Request $request){

        $dateFrom = Carbon::createFromFormat('Y-m-d', $request->date_from);
        $dateTo = Carbon::createFromFormat('Y-m-d', $request->date_to);
        $days_taken = $dateFrom->diffInDays($dateTo)+1;

        if($request->leave_id == 1){
            if($days_taken > auth()->user()->total_annual){
                return redirect()->route('admin.leaverequest.create')->with('error', 'Leave exceed');
            }
        }
        else{
            return redirect()->route('admin.leaverequest.index')
            ->with('success', 'Leave Application Submitted');
        }

        Application::create([
            'user_id'=>auth()->user()->id,
            'leave_id'=>$request->leave_id,
            'date_from'=>$request->date_from,
            'date_to'=>$request->date_to,
            'days_taken'=> $dateFrom->diffInDays($dateTo)+1,
        ]);
        return redirect()->route('admin.leaverequest.index')
            ->with('success', 'Leave Application Submitted');
    }

这是批准/拒绝请假请求的功能。

 public function approval(Request $request, $id){
    
            $leaverequest = Application::find($id);
            
            if($leaverequest->status = $request->approve){
                
                $leaverequest->save();
                return redirect()->back();
            }
            elseif($leaverequest->status = $request->reject){
                $leaverequest->save();
                return redirect()->back();
            }
           
        }

此功能用于计算每次请假被批准时扣除总请假。如果没有,总休假将保持不变。

    public function leaveBalance(Request $request, $id){
    
                $leaverequest = Application::all();
                $days_taken = $request->days_taken;
                $annual_balance = User::find($id);
                
                if($request->status == 1){
                    $annual_balance->total_annual = $annual_balance->total_annual - $days_taken;
                    $annual_balance->save();
                    return redirect()->route('home');
                }
                
            }

除了 leaveBalance 函数外,其他函数似乎运行良好。我试过使用这段代码,但也没有用。

auth()->user()->total_annual = auth()->user(->total_annual - $days_taken;
auth()->user()->save();

标签: phplaravel

解决方案


第一个代码看起来不错,但是如果您遇到错误或没有更新记录,那么我建议首先调试您的代码,所有变量的值都类似于 $annual_balance = User::find($id); 你得到这个数据了吗?如果你得到所有东西然后尝试将 $annual_balance->total_annual 存储在一个变量中,然后从变量中减去代码。

       function leaveBalance(Request $request, $id){

        $leaverequest = Application::all();
        $days_taken = $request->days_taken;
        $annual_balance = User::find($id);
        
        if($request->status == 1){
            $total_annual = $annual_balance->total_annual;
            $annual_balance->total_annual = $total_annual - $days_taken;
            $annual_balance->save();

            return redirect()->route('home');
        }
        
    }

// 或者你可以尝试使用 DB,如果上面的方法不起作用,别忘了在 Controller 上添加 Use DB。

             $affected = DB::table('users')
          ->where('id', $id)
          ->update(['total_annual' => $total_annual]);

推荐阅读