-2

人事部が記入する従業員の出席をマークするフォームがあり、現在のすべての従業員にループされます。データベースで出席がマークされている現在の値を表示する必要があります。それ以外の場合は空白にする必要があります。

私のコントローラーでは、既存の結果を照会します。

$results = Attendance::where('Sdate', '=', date("Y-m-d", strtotime($TheDate))) ->get();

次に、それらをループして従業員の詳細を取得します。

foreach($results as $result)
{
    $contractors = DB::table('contractors') ->where('contractors.AreaPosition', '=', $department) ->where('PRN', '!=', $result->PRN) ->get(); $employees = DB::table('current_employees') ->where('current_employees.AreaPosition', '=', $department) ->where('PRN', '!=', $result->PRN) ->get(); $showEmployees = array_merge($contractors, $employees);
}

これにより、その日付の出席記録が保存されているすべての従業員が除外されるはずですが、正しくループしていないようです。一部の結果は除外されますが、すべてではありません。結果変数を返すと、レコードの正しいリストが得られるので、その部分が正しく機能していることがわかります。

私の見解で達成しようとしているのは、次のようなものです。

@foreach($attendance as $results)

Show form where there's an existing record for this date and department

@endforeach



@foreach($employees as $employee)

Show form for all employees in this department (but should exclude results where there is a record in attendance)

@endforeach
4

2 に答える 2

0

コードの問題は、結果を配列ではなく変数に保存していることです。あなたの解決策は、データを配列に格納することです

foreach($results as $result)
{
    $contractors[] = DB::table('contractors') ->where('contractors.AreaPosition', '=', $department) ->where('PRN', '!=', $result->PRN) ->get(); $employees = DB::table('current_employees') ->where('current_employees.AreaPosition', '=', $department) ->where('PRN', '!=', $result->PRN) ->get(); $showEmployees = array_merge($contractors, $employees);
}

請負業者の配列を印刷してみて、何が起こるか見てみましょう。これがうまくいくことを願っています

于 2015-05-04T06:36:37.067 に答える
0

これは、Laracastsで私のために答えられました。

私がしなければならなかったのは、チェックする変数のリストを作成することでした(従業員番号)

    $PRNs = Attendance::where('Sdate', '=', date("Y-m-d", strtotime($TheDate)))->lists('PRN');

そして、Laravel の whereNotIn を使用して、リストと照合します。

    $contractors = DB::table('contractors')
        ->where('contractors.AreaPosition', '=', $department)
        ->whereNotIn('PRN', $PRNs)
        ->get();
于 2015-05-04T10:06:30.693 に答える