如何在PHP Laravel的两个日期之间从db获取所有数据?
问题描述:
我无法接收在两个日期之间插入的所有数据。例如开始日期:2017-01-15 - 2018-05-15:结束日期。如何在PHP Laravel的两个日期之间从db获取所有数据?
我想是谁在那段时间工作了一个具体项目的人都工资,我的代码是这样的,到目前为止:
$project = Project::find($project_id);
$projectStartDate = $project->start_date;
$projectEndDate = $project->end_date;
$usersOfProject = $project->users()->get();
foreach ($usersOfProject as $userOfProject){
$ids = $userOfProject->id;
$userWages = UserWage::where('user_id',$ids)->where('start_date','<=', $projectStartDate)->where('end_date','>=',$projectEndDate)->get();
foreach ($userWages as $userWage){
$wage= wage + $userWage->value;
return $wage;
}
}
当我dd($ids);
,仅显示1中的工作用户对于这个项目,不是全部。 (目前有两个工作)。
fillables为UserWages是这些:
protected $fillable = [
'value', 'currency', 'user_id', 'start_date', 'end_date',
];
,项目:
protected $fillable = [
'name', 'description', 'start_date', 'end_date', 'value', 'client_id','currency','',
];
,用户:
protected $fillable = [
'email', 'password', 'first_name', 'last_name', 'status_id','mobile', 'role',
];
所有这一切的目的是,我试图让在项目开始和项目结束期间为该项目工作的每个用户的工资。 工资可能会逐月改变,所以他们的汇率(付款可以美元,欧元或阿尔巴尼亚列克);
我正在尝试获取属于该项目的用户的所有工资,并计算他们可能拥有的每项工资的数据。以当月的汇率计算,汇率可由管理员填写。汇率
代码是这样的:
function exchangeRate($value, $currency){
$getCurrency = Exchange::whereDate('date','2017-11-30'); //This is just for test to calculate wages with exchange rate of november 30, will do with carbon to get last date of month.
$dollar = $getCurrency->dollar_lek;
$euro = $getCurrency->euro_lek;
if ($currency == 'ALL') {
$value = $value;
} elseif ($currency == 'USD') {
$value = $value * $dollar;
} else {
$value = $value * $euro;
}
}
fillables汇率是
protected $fillable =[
'euro_lek', 'dollar_lek', 'date',
];
答
我想我已经找到了什么问题。 您应该使用其中在获得所有用户工资。
更改此:
$project = Project::find($project_id);
$projectStartDate = $project->start_date;
$projectEndDate = $project->end_date;
$usersOfProject = $project->users()->get();
foreach ($usersOfProject as $userOfProject){
$ids = $userOfProject->id;
$userWages = UserWage::where('user_id',$ids)->where('start_date','<=', $projectStartDate)->where('end_date','>=',$projectEndDate)->get();
foreach ($userWages as $userWage){
$wage= wage + $userWage->value;
//it should be pushed into array and not returning single value.
return $wage;
}
}
进入这个:
$project = Project::find($project_id);
$projectStartDate = $project->start_date;
$projectEndDate = $project->end_date;
$wages = array();
$usersOfProject = $project->users()->get();
foreach ($usersOfProject as $userOfProject){
$userWages = UserWage::whereIn('user_id',$usersOfProject>pluck('id')->toArray())->where('start_date','<=', $projectStartDate)->where('end_date','>=',$projectEndDate)->get();
foreach ($userWages as $userWage){
$wage= wage + $userWage->value;
array_push($wages, $wage);
}
}
return $wages;
答
我会让它以不同的方式:
$project = Project::find($project_id);
$projectStartDate = Carbon::parse($project->start_date)->startOfDay();
$projectEndDate = Carbon::parse($project->end_date)->endOfDay();
$usersOfProject = $project->users()->get();
$userWages = UserWage::whereIn('user_id',$usersOfProject->pluck('id')->toArray())->whereBetween('start_date',[ $projectStartDate,$projectEndDate])->whereBetween('end_date',[ $projectStartDate,$projectEndDate])->get();
$wages = [];
foreach ($userWages as $userWage){
$wage= wage + $userWage->value;
array_push($wages,$wage);
}
dd($userWages,$wages);
为什么你必须在返回第二个foreach循环?它只会返回一条记录。查询是可以的。你必须详细说明你的问题。 –
@forexknight嘿,我更新了这个问题,你能再次检查吗? – BTEK
当你执行'dd($ ids)'时,循环在第一次迭代时暂停。这就是为什么它只显示一个用户。改用'dump($ ids)'。 – Gayan