sql >> データベース >  >> NoSQL >> MongoDB

Laravelで月ごとの現在の日をカウントするにはどうすればよいですか?

    これがコントローラーの機能です

    public function employeeAttendance(Request $request)
    {
        $employeeName = User::all();
        $countMonth   = (!empty($request->get('month')) ? intval($request->get('month')) : 0);
        $countYear    = (!empty($request->get('year')) ? intval($request->get('year')) : 0);
        $firstDay     = new DateTime(date('F jS Y h:i:s A', strtotime('first day of ' . date('Y-m', strtotime("$countYear-$countYear")))));
        $lastDay      = new DateTime(date('F jS Y h:i:s A', strtotime('last day of ' . date('Y-m', strtotime("$countYear-$countYear")))));
    
        $employeeLeave = LeaveManagement::where('yourdatefield', '>=', $firstDay)
            ->where('yourdatefield', '<=', $lastDay)->get();
        $totalWorkingDays = 0;
        if (!empty($countMonth && $countYear)) {
            $totalWorkingDays = $this->countDays($countYear, $countMonth, array(0, 6));
        }
        $result = [];
        foreach ($employeeLeave as $empleave) {
            if ($empleave->type == 'casual') {
                $result[$empleave->name]['casual'][] = $empleave;
            }
            if ($empleave->type == 'medical') {
                $result[$empleave->name]['medical'][] = $empleave;
            }
        }
        return view('pages.attendance', compact('employeeName', 'totalWorkingDays', 'employeeLeave','result'));
    }
    
    
    
    public function countDays($year, $month, $ignore)
    {
        $count   = 0;
        $counter = mktime(0, 0, 0, $month, 1, $year);
        while (date("n", $counter) == $month) {
            if (!in_array(date("w", $counter), $ignore)) {
                $count++;
            }
            $counter = strtotime("+1 day", $counter);
        }
        return $count;
    }
    

    forloopを少し変更しました

    for ($year = 2000; $year <= 2050; $year++) {
        $selected = (isset($getYear) && $getYear == $year) ? 'selected' : '';
        echo "<option value='$year' $selected>$year</option>";
    }
    

    前の質問ですべてが処理されていることを確認し、機能するかどうかを確認します。

    編集

    $employeeLeaveのデータをフェッチした後、結果の配列を作成します

    $result = [];
    foreach ($employeeLeave as $empleave) {
        if ($empleave->type == 'casual') {
            $result[$empleave->name]['casual'][] = $empleave;
        }
        if ($empleave->type == 'medical') {
            $result[$empleave->name]['medical'][] = $empleave;
        }
    }
    

    $resultを送信します ブレードに。

    HTMLテーブルの構造を次のように変更します

    <table class="table table-bordered table-striped ">
        <thead>
            <tr>
                <th>Employee Name</th>
                <th>Present Day</th>
                <th>Casual Leave</th>
                <th>Medical Leave</th>
            </tr>
        </thead>
        <tbody>
            @foreach($result as $empname => $empleave)
                <tr>
                    <td>{{ $empname }}</td>
                    <td>{{ $totalWorkingDays }}</td>
                    <td>{{ count($result[$empname]['casual']) }}</td>
                    <td>{{ count($result[$empname]['medical']) }}</td>
    
                </tr>    
            @endforeach
        </tbody>
    </table>
    



    1. Node.jsのソケットを介したRedis接続

    2. 連想配列を保存する方法を再確認しますか?セットまたはハッシュまたはリスト?

    3. C#のStackExchange/Sentinelを使用したRedisフェイルオーバー

    4. Spring Boot + Apache Camel+Mongodb統合の問題