для немедленного решения я создал необработанный запрос
// start range 7 days ago
$start = date('z') + 1 - 7;
// end range 7 days from now
$end = date('z') + 1 + 7;
$customerslist = Customers::whereRaw("DAYOFYEAR(birthday) BETWEEN $start AND $end")->get();
EDITED
Итак, я создал 5000 записей сслучайный год и дата
MethodOne Использование Eloquent filter
$checkRange = array_map(
function ($date) {
return $date->format('Y-m-d');
},
\Carbon\CarbonPeriod::create(now(), now()->addDays(7))->toArray()
);
$carbonWay = Customer::get()->filter(function($eachCus) use ( $checkRange){
return in_array( $eachCus->dob, $checkRange);
});
Но если у вас Много клиентов , это приведет к перегреву сервера sql
Метод Два QueryBuilder Way
$eloquentway = Customer::whereDate('dob','>=', now())
->whereDate( 'dob', '<=', now()->addDays(7))
->get();
Так что оба результата одинаковы для меня одинаково
Наконец я проверил, есть ли идентификаторытакие же матчи
$idsofCarbon = $carbonWay->pluck('id')->toArray();
$idsofFilter = $elequentway->pluck('id')->toArray();
dump(array_diff( $idsofFilter, $idsofCarbon));
dump(array_diff( $idsofCarbon, $idsofFilter));
Оба дают мне []
Что означает, что результат точен
Подробнее о фильтрации даты
https://laraveldaily.com/eloquent-date-filtering-wheredate-and-other-methods/https://laravel.com/docs/5.8/queries#where-clauses
Просьба прокомментировать, если возникнут проблемы
Надеюсь, это поможет