В этой статье блога мы рассмотрим различные методы получения записей из базы данных в Laravel на основе текущей недели. Независимо от того, создаете ли вы систему управления задачами, панель мониторинга продаж или любое другое приложение, требующее фильтрации данных по неделям, эти методы пригодятся. Мы рассмотрим различные подходы, объясним примеры кода и предоставим вам разговорные объяснения, чтобы облегчить понимание процесса. Давайте погрузимся!
Метод 1: использование необработанных SQL-запросов.
Если вам удобно писать необработанные SQL-запросы, вы можете использовать возможности предложения WHEREи функций даты для получения записей за текущую неделю. Вот пример:
$startDate = now()->startOfWeek()->toDateString();
$endDate = now()->endOfWeek()->toDateString();
$records = DB::select("SELECT * FROM your_table WHERE created_at BETWEEN '{$startDate}' AND '{$endDate}'");
Объяснение:
В этом методе мы используем методы startOfWeek()и endOfWeek(), предоставляемые библиотекой Laravel Carbon, для определения дат начала и окончания текущей недели. Затем мы используем эти даты в предложении BETWEENSQL-запроса для фильтрации записей.
Метод 2: использование Eloquent ORM
Если вы предпочитаете работать с Eloquent ORM от Laravel, вы можете добиться того же результата, используя более выразительный синтаксис. Вот как это можно сделать:
$startDate = now()->startOfWeek();
$endDate = now()->endOfWeek();
$records = YourModel::whereBetween('created_at', [$startDate, $endDate])->get();
Объяснение:
В этом методе мы создаем два экземпляра Carbon, представляющие начало и конец текущей недели. Затем мы используем метод whereBetween(), предоставленный Eloquent, для фильтрации записей на основе столбца created_at.
Метод 3: использование настраиваемой области запроса
Чтобы сделать код более пригодным для повторного использования, вы можете определить настраиваемую область запроса в своей модели. Вот пример:
// Inside YourModel.php
public function scopeCurrentWeek($query)
{
$startDate = now()->startOfWeek();
$endDate = now()->endOfWeek();
return $query->whereBetween('created_at', [$startDate, $endDate]);
}
// Usage:
$records = YourModel::currentWeek()->get();
Объяснение.
Определив настраиваемую область запроса, вы инкапсулируете логику фильтрации записей по текущей неделе в своей модели. Это позволяет вам легко повторно использовать область действия в разных частях вашего приложения.