Вы можете использовать whereDate()
с >=
и <=
операторами. Обратите внимание, что метод whereDate()
извлекает часть даты из выражения datetime. Таким образом, на ту же дату запрос вернет все регистры created_at
на эту дату.
$date_from = $request->start_date;
$date_to = $request->end_date;
$render=[];
$userresponses = DB::table('user_response as g')
->select(
// ...
)
->orderByRaw('g.created_at DESC')
->when($date_from, function($query) use ($date_from, $render) {
$render['start_date'] = $date_from;
$query->whereDate('created_at', '>=', $date_from);
})
->when($date_to, function($query) use ($date_to, $render) {
$render['end_date'] = $date_to;
$query->whereDate('created_at', '<=', $date_to);
})
->orderBy('created_at','DESC')
->paginate(15);
Если вы хотите сравнить дату и время, используйте where()
. И то же самое, вы можете решить проблему "если start_date и end_date не совпадают в одну и ту же дату" с операторами <=
и >=
.
// ...
->when($date_from, function($query) use ($date_from, $render) {
$render['start_date'] = $date_from;
$query->where('created_at', '>=', $date_from);
})
->when($date_to, function($query) use ($date_to, $render) {
$render['end_date'] = $date_to;
$query->where('created_at', '<=', $date_to);
})
Но было бы очень трудно найти запись с даты-времени "2019-06-28 14:44:44"
до той же даты-времени, она вернула бы что-то, только если запись была создана в эту точную секунду.