Получаем ближайшие даты, котоыре будут.
Это бывает необходимо, например, при написании функционала напоминаний или ближайших дней рождения и т.д.
Основное, что будет использовано:
- Библиотека для работы с датами Carbon. Ссылка - https://carbon.nesbot.com/docs/.
- Метод построителя запросов
whereBetween
. Ссылка - https://laravel.su/docs/8.x/queries#additional-where-clauses.
Допустим, у нас есть модель Reminds
(Напоминания), в которой есть поле datetime
(дата события). Нам нужно получить выборку между двумя датами - текущая дата и текущая дата + 3 дня.
Сам запрос будет выглядеть так:
$nearestReminds = Remind::whereBetween('datetime', $this->createRange())
->sortByDesc('datetime')
->values()
->toArray();
Примечание. Метод values() используется, чтобы сбросить ключи коллекций в выборке и чтобы на выходе был массив с данными, а не объект.
Но у нас есть метод createRagne()
, который формирует нам 2 даты для метода whereBetween
. Выглядит он так:
private function createRange(): array
{
$now = (new Carbon())->now();
$firstDate = $now->format('Y-m-d H:i:s');
$lastDate = $now->addDays(3)->format('Y-m-d H:i:s');
return [
$firstDate,
$lastDate
];
}
Этот метод возвращает массив вида:
[
0 => '2023-03-19 21:36',
1 => '2023-03-22 21:36'
]
Собственно, он и нужен для метода whereBetween
.