2017-09-05 6 views
1

2つの日付の間に挿入されたすべてのデータを受信できません。たとえば、開始日:2017-01-15 - 2018-05-15:終了日。PHP Laravelの2つの日付の間に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; 
    } 
} 

私はそれが働いているだけで1ユーザーを示しdd($ids);プロジェクトのためではなく、それらのすべて。 (現在2つはそれに取り組んでいる)。 UserWagesため

fillablesはこれらです:

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ループ? 1つのレコードのみを返します。クエリはOKです。あなたはあなたの質問を精緻化しなければなりません。 –

+0

@forexknightねえ、質問を更新しました。もう一度確認できますか? – BTEK

+0

'dd($ ids)'を実行すると、ループは最初の反復で停止します。そのため、1人のユーザーしか表示されません。代わりに '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が文字列、配列が与えられると期待しています' ヘルパーで540行しかないときにヘルパー行547にエラーがあります – BTEK

+0

はい、実際にはユーザーのIDだけを取得してから変換してくださいそれを配列にする。 –

+0

'$ wage = $ wage + $ userWage-> value;'私はそれに '$ wage = wage + $ userWage-> value;を追加しました。とにかく、そこにはいられないはずです。 すべての賃金が合計されるためです。 – 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

関連する問題