我在休假模型中创建了一个名为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天的总休假。有人能帮忙吗?
<?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;
}
}我的商店方法
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 !');
}
}发布于 2022-06-08 22:39:21
解决了:是帮助我解决这个问题的链接,在这里可以找到Laravel - sum of current user
我只是将我的getSumOfLeaveTaken()逻辑更改为并能够对特定用户的休假进行求和。
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;
}https://stackoverflow.com/questions/72540218
复制相似问题