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