2017-09-05 41 views
1

我无法接收在两个日期之间插入的所有数据。例如开始日期: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', 
]; 
+0

为什么你必须在返回第二个foreach循环?它只会返回一条记录。查询是可以的。你必须详细说明你的问题。 –

+0

@forexknight嘿,我更新了这个问题,你能再次检查吗? – BTEK

+0

当你执行'dd($ ids)'时,循环在第一次迭代时暂停。这就是为什么它只显示一个用户。改用'dump($ ids)'。 – Gayan

回答

1

我想我已经找到了什么问题。 您应该使用其中在获得所有用户工资。

更改此:

$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; 
+0

'htmlspecialchars()期望参数1是字符串,给定的数组' 它说,它在帮助者行547中的错误,当我只有帮助者540行 – BTEK

+0

是的,实际上,我们应该只获得用户的id,然后转换它来阵列。 –

+0

我忘了添加'$工资= $工资+ $ userWage->价值;'我有'$工资=工资+ $ userWage->价值;'无论如何,当它不应该在那里。 因为它总计所有工资。 – BTEK

0

我会让它以不同的方式:

$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); 
+0

得到一个空数组,但我认为这可能是日期问题,所以我检查了出来。 如果我在'$ userWage'手动输入日期,它会得到数据 – BTEK

+0

尝试更新答案 – aaron0207

相关问题