Laravel - запрашивать данные из mysql между датами

У меня возникла проблема с получением строк из моей таблицы с помощью приведенного ниже запроса, ожидаемое поведение:

пользователь выбирает дату начала/окончания в форме, нажимает «Отправить», и данные передаются функции, а затем используются в запросе.

Данные из формы поступают в порядке, и я проверил, что даты поступают в запрос, но по какой-то причине запрос всегда возвращает нулевые результаты? Когда я удаляю оператор WHERE для дат, запрос работает нормально и дает результаты, поэтому проблема связана с датами.

$fromDate = $request->fromDate;
$toDate = $request->toDate;

$data = cc_table::all('*')
    ->where('link', '1')
    ->where('created_at', '>', $fromDate)
    ->where('created_at', '<', $toDate)
    ->toArray();

Даты из формы отформатированы как дд/мм/гггг, а дата created_at является отметкой времени, однако для тестирования я изменил created_at на DATE (дд/мм/гггг), однако запрос по-прежнему возвращает нулевые строки.

FYI - я просто использую jquery datepicker в своей форме:

 $(function() {
    $( "#fromDate" ).datepicker();
  });
  </script>

person just_chris    schedule 23.06.2016    source источник
comment
почему бы не использовать yyyy-mm-dd полностью?   -  person Strawberry    schedule 23.06.2016


Ответы (1)


Попробуйте с этим:

$fromDate = Carbon::parse($request->input('fromDate'))->format('Y-m-d');
$toDate = Carbon::parse($request->input('toDate'))->format('Y-m-d');
$date_range = [$fromDate . ' 00:00:00', $toDate . ' 23:59:59'];

$data = cc_table::where('link', '1')
->whereBetween('created_at', $date_range)
->get();

Формат $date_range будет зависеть от типа вашего столбца MySQL.

Примечание: не забудьте поставить use Carbon\Carbon; в верхней части скрипта с приведенным выше фрагментом кода.

person Raphael Rafatpanah    schedule 23.06.2016
comment
Это блестяще и отлично сработало, спасибо за вашу помощь в этом. - person just_chris; 23.06.2016
comment
Кроме того, спасибо за «whereBetween» - я пропустил это в документах laravel. Благодарность - person just_chris; 23.06.2016