is whereBetween in laravel inclusive?

2019-06-21 05:26发布

问题:

In my database there are 4 students:

1st Student's created_at = 2016-05-12 02:23:51

2nd Student's created_at = 2016-05-27 07:37:45

3rd Student's created_at = 2016-05-29 07:40:29

4th Student's created_at = 2016-05-29 07:50:05

Why does my code only returns the 1st student?

$students = Student::select('id as ID_NO', 'fname as Firstname', 'lname as Lastname', 'created_at')
                             ->whereBetween('created_at', 
                              [Carbon::createFromDate(2016, 5, 12)->toDateString(),
                               Carbon::createFromDate(2016, 5, 27)->toDateString()])

The 1st and 2nd student should be returned. Is the "to" part inclusive in whereBetween or there's something wrong with my code ?

I need your help guys. Thanks in advance!

回答1:

You need to format your created_at to Y-m-d format. Please see the change:

$students = Student::select('id as ID_NO', 'fname as Firstname', 'lname as Lastname', 'created_at')
                                 ->whereBetween(DB::raw('date(created_at)'), 
                                  [Carbon::createFromDate(2016, 5, 12)->toDateString(),
                                   Carbon::createFromDate(2016, 5, 27)->toDateString()])


回答2:

For others who end up here and want the answer to the question asked (in case it's updated… "Is whereBetween in Laravel inclusive?"):

Yes.



回答3:

Laravel search between, this means it will get all the rows between 2016-05-12 00:00:00 and 2016-05-27 00:00:00. Your second user is created at 2016-05-27 07:37:45, this is outside the range so Laravel won't fetch it.

Use this and try if this works:

$students = Student::select('id as ID_NO', 'fname as Firstname', 'lname as Lastname', 'created_at')
                             ->whereBetween('created_at', 
                              [Carbon::createFromDate(2016, 5, 12)->toDateString(),
                               Carbon::createFromDate(2016, 5, 28)->toDateString()])

Hope this works!