omar-elnaghy/laradate-filters

一个用于高级日期过滤和操作的 Laravel 扩展包

1.0.8 2023-09-23 13:21 UTC

This package is auto-updated.

Last update: 2024-09-09 21:13:41 UTC


README

一个用于高级日期过滤和操作的 Laravel 扩展包

Laravel 日期过滤是一个扩展包,简化了 Laravel Eloquent 模型的基于日期的过滤。它提供了一系列方便的方法来根据不同的日期和时间间隔过滤记录。

目录

安装

您可以通过 Composer 安装此包

composer require omar-elnaghy/laradate-filters

然后发布配置文件

php artisan vendor:publish --provider="OmarElnaghy\LaraDateFilters\ServiceProvider"

使用

日期过滤方法:使用提供的如 FilterByDateRange, FilterByDateHoursRange, FilterByDateMinutesRange 等,根据您的特定标准过滤记录。

use Illuminate\Database\Eloquent\Model;
use OmarElnaghy\LaraDateFilters\Traits\Builder\PackageBuilder;

class YourModel extends Model
{
    public function newEloquentBuilder($query)
    {
        return new PackageBuilder($query);
    }
}

特性

日期范围过滤 : 您可以根据指定的日期范围过滤记录,包括创建于“之后”或“之前”某个日期和时间的记录。

$startDate = Carbon::parse('2023-9-03');
$range = \OmarElnaghy\LaraDateFilters\Enums\DateRange::INCLUSIVE;
$direction = 'after';                                                                                     
$results = Post::filterByDateRange(2,'day',$startDate, $direction, $range)->get();           

灵活的时间单位 : 您可以使用各种时间单位(如秒、分钟、小时、天、周或月)过滤记录。

    $results = Post::filterByDateRange(2,'day',$startDate, $direction, $range)->get();      
    $results = Post::filterByDateRange(2,'week',$startDate, $direction, $range)->get();      
    $results = Post::filterByDateRange(2,'hour',$startDate, $direction, $range)->get();      

包含或排除范围 : 您可以选择日期范围是包含还是排除,以便您可以微调查询结果。

$range = \OmarElnaghy\LaraDateFilters\Enums\DateRange::INCLUSIVE;
$range = \OmarElnaghy\LaraDateFilters\Enums\DateRange::EXCLUSIVE;

关键特性

此特质的重点是其处理基于简单命名约定的动态日期过滤方法的能力,这使得它对于开发者来说非常方便且强大。

动态日期过滤魔法

使用我们的 BuilderTrait 释放动态日期过滤的魔法!不再需要编写繁琐的重复日期过滤方法。使用此特质,您只需遵循命名约定即可动态创建日期过滤器。

    $results = Post::filterByDateSecondsRange(2,$startDate, $direction, $range)->get();

    $results = Post::filterByDateMinutesRange(2,$startDate, $direction, $range)->get();

    $results = Post::filterByDateHoursRange(2,$startDate, $direction, $range)->get();

    $results = Post::filterByDateDaysRange(2,$startDate, $direction, $range)->get();

    $results = Post::filterByDateWeeksRange(2,$startDate, $direction, $range)->get();

    $results = Post::filterByDateMonthsRange(2,$startDate, $direction, $range)->get();

轻松的日期过滤

想象一下,您想根据日期过滤记录,但不想为每种可能的持续时间(秒、分钟、小时、天、周、月等)编写单独的方法。我们的 BuilderTrait 可以解决您的问题。只需按照“filterByDateXRange”的模式命名方法即可。X 可以是任何持续时间,特质将处理其余部分。

// [Duration] is a number refer to the number of [Date Unit] you want to search in          
return Post::filterByDate(Duration)(Date Unit)Range($startDate, $direction, $range)->get();

方便且灵活

需要过滤最后 30 分钟的记录?调用 filterByDate30MinutesRange()。需要上周的记录?只需调用 filterByDate{duration}{unit}Range() 即可。特质动态生成这些方法,使您的代码更整洁,生活更简单。

示例

1 - 根据自定义的持续时间日期单位(秒、分钟、小时等)进行过滤

$startDate = Carbon::parse('2023-09-03');
$range = \OmarElnaghy\LaraDateFilters\Enums\DateRange::INCLUSIVE;
$direction = 'after';

return Post::filterByDate5DayRange($startDate, $direction, $range)->get();

return Post::filterByDate6WeekRange($startDate, $direction, $range)->get();

return Post::filterByDate7MonthRange($startDate, $direction, $range)->get();