2016-06-02 2 views
1

В моей базе данных есть 4 студентов:есть где между laravel включительно?

created_at

1-го студента = 2016-05-12 02:23:51

created_at 2-й Стьюдента = 2016-05-27 07:37:45

created_at 3-й Стьюдента = 2016-05-29 07:40:29

created_at 4-й Стьюдента = 2016-05-29 07:50:05

Почему мой код возвращает только 1-й студент?

$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()]) 

Первый и второй ученики должны быть возвращены. Является ли «до» частью включительно в whereBetween или что-то не так с моим кодом?

Мне нужна ваша помощь. Заранее спасибо!

+0

Это потому, что, когда вы указали 'Carbon :: createFromDate (2016, 5, 27) -> toDateString()' это ученик, созданный до 2016-05-27 00:00:00, так как ваш второй ученик создан после в то время он был исключен. – Rifki

ответ

0

Вам необходимо отформатировать created_at до Y-m-d. Пожалуйста, смотрите изменение:

$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()]) 
+0

Ваш ответ выдает сообщение об ошибке: Неизвестный столбец 'date (created_at)' –

+0

см. Правки plz – Ali

+0

Это сработало! Спасибо, Али! :) –

1

Laravel search between, это означает, что он получит все строки между 2016-05-12 00:00:00 и 2016-05-27 00:00:00. Ваш второй пользователь создан на 2016-05-27 07:37:45, это вне диапазона, поэтому Laravel не будет его получать.

Используй это и попробовать, если это работает:

$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()]) 

Надеется, что это работает!

+0

Ваше объяснение очищает его. Есть ли другой способ оставить +1 для 'to'? –

5

Для тех, кто в конечном итоге здесь и хотят ответить на поставленный вопрос (в случае, если она обновляется ... «Is whereBetween в Laravel включено?»):

Да.

Смежные вопросы