php - Deducting the total leave when the leave request is approved

Solution:

First of code looks fine , but if you getting error or not updating record then i suggests to debug your code first that all variables have values like $annual_balance = User::find($id); did you get data in this? and if you get all things then try to store $annual_balance->total_annual in one variable and then subtract code from variable.

       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');
        }
        
    }

// Or you can try using DB if above not work don't forget to add Use DB on top of Controller.

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

Answer

Solution:

You could also try this

I would say return a single total_annual (total_annual refers to the total leave field in the users table) for a certain user from the user table and note the keyword value() in the query which indicates one value.

$annual_balance variable store a total annual leave and $days_taken store the number of leave days taken and do some calculation as below to set the total annual which is the remaining total annual leave after days taken $annual_balance->total_annual = $annual_balance - $days_taken;

public function leaveBalance(Request $request, $id){

    $days_taken = $request->days_taken;
    $annual_balance = User::where('user_id', $id)->select('total_annual')->value('total_annual');
            
    if($request->status == 1)
    {
       $annual_balance->total_annual = $annual_balance - $days_taken;
       $annual_balance->save();
       return redirect()->route('home');
    }    
}

Source