使用输入MONTH和YEAR过滤记录,但记录仍返回当前的MONTH和YEAR

时间:2018-11-15 03:38:41

标签: php laravel

我正在通过输入MONTH和YEAR来获取该MONTH和YEAR的所有出勤记录,以获取所有出勤记录。但是我遇到一个问题,当我输入MONTH和YEAR时,它返回当前的MONTH和YEAR记录。这是我下面的功能代码

public function getEmployeeAttendance(){
        $month = Carbon::now(request('attendance_date'))->format('m');
        $year = Carbon::now(request('attendance_date'))->format('Y');

        dump($month);
        dump($year);

        $emp_attendance = Attendance::whereMonth('attendance_date' , '=' , $month)
                                    ->whereYear('attendance_date' , '=' , $year)
                                    ->get();

        if ($emp_attendance->isEmpty() ) {
            return response()->json([
              'Error' => 'No record!!!.']);
        }

        return response()->json(
          [
            'success' => true, 
            'data' => $emp_attendance
          ]
        );
      }

当我使用dd($ month)和dd($ year)时,它返回当前的MONTH为“ 11”和YEAR为“ 2018”,但是我在Postman中的输入为MONTH =“ 5”和YEAR =“ 2015” (结果应返回空记录,但返回所有当前数据)。

能否请您给我一些有关如何改进此代码的建议。我使用了另一个函数中的相同代码,但是在编写此代码以输入MONTH和YEAR时,该代码未运行。谢谢!

2 个答案:

答案 0 :(得分:0)

使用Carbon :: parse代替Carbon :: now

答案 1 :(得分:0)

选项1

  

如果您的输入是这样的:2018-11-12(Y-m-d)

$month = Carbon::createFromFormat('Y-m-d', request('attendance_date'))->format('m');
$year  = Carbon::createFromFormat('Y-m-d', request('attendance_date'))->format('Y');

dump($month);
dump($year);

$emp_attendance = Attendance::whereMonth('attendance_date' , '=' , $month)
                            ->whereYear('attendance_date' , '=' , $year)
                            ->get();

选项2

  

如果您的输入是这样的:2018-11-12 10:10:59(Y-m-d H:i:s)

$month = Carbon::createFromFormat('Y-m-d H:i:s', request('attendance_date'))->format('m');
$year  = Carbon::createFromFormat('Y-m-d H:i:s', request('attendance_date'))->format('Y');

dump($month);
dump($year);

$emp_attendance = Attendance::whereMonth('attendance_date' , '=' , $month)
                            ->whereYear('attendance_date' , '=' , $year)
                            ->get();

有关更多信息:https://carbon.nesbot.com/docs/

选项3

  

如果您的输入是这样的:

1. Input box-1 >> 10(month) 
2. Input box-2 >> 2018(year)


/* 
# No need those section.
$month = Carbon::createFromFormat('Y-m-d H:i:s', request('attendance_date'))->format('m');
$year  = Carbon::createFromFormat('Y-m-d H:i:s', request('attendance_date'))->format('Y');

dump($month);
dump($year);
# END
*/

$emp_attendance = Attendance::whereRaw("month(attendance_date) = '".request('attendance_month')."'")
                            ->whereRaw("year(attendance_date) = '".request('attendance_year')."'")
                            ->get();