marshmallow/laravel-recurring-models

为Laravel Models添加可重复的功能

dev-master 2024-02-15 10:28 UTC

This package is auto-updated.

Last update: 2024-09-15 11:54:18 UTC


README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

介绍我们的Laravel Recurring包 - 添加重复功能到Laravel Models的终极解决方案!无论您需要简单的每日、每周或每n天的重复,或者更复杂的模式,如每月第二个星期五重复模型,我们的包都能满足您的需求。通过无缝集成到您的Laravel应用程序中,您只需几行代码就可以轻松管理和自动化重复任务。

安装

您可以通过composer安装此包

composer require mohammedmanssour/laravel-recurring-models

您可以使用以下命令发布和运行迁移

php artisan vendor:publish --tag="recurring-models-migrations"
php artisan migrate

用法

将可重复功能添加到模型

  1. 确保您的模型实现了Repeatable接口。
use MohammedManssour\LaravelRecurringModels\Contracts\Repeatable as RepeatableContract;

class Task extends Model implements RepeatableContract
{

}
  1. Repeatable特质添加到您的模型
use MohammedManssour\LaravelRecurringModels\Contracts\Repeatable as RepeatableContract;
use MohammedManssour\LaravelRecurringModels\Concerns\Repeatable;

class Task extends Model implements RepeatableContract
{
    use Repeatable;
}
  1. 可选,自定义模型的基础日期。
/**
 * define the base date that we would use to calculate repetition start_at
 */
public function repetitionBaseDate(RepetitionType $type = null): Carbon
{
    return $this->created_at;
}

模型重复规则

Repeatable特质有一个repeat方法,可以帮助您定义模型的重复规则。

repeat方法将返回一个具有4个方法的Repeat辅助类:dailyeveryNDaysweeklycomplex

1. 每日重复

这将帮助您为模型创建每日重复规则。

$model->repeat()->daily()

重复将从基于返回值的repetitionBaseDate的下一日开始。

2. 每 N 天重复

这将帮助您为模型创建每 N 天重复规则。

$model->repeat()->everyNDays(days: 3)

重复将从基于返回值的repetitionBaseDate的 n=3 天后开始。

3. 每周重复

这将帮助您为模型创建每周重复规则。

$model->repeat()->weekly()

重复将从基于返回值的repetitionBaseDate的 7 天后开始。

您可以使用on方法指定重复的日期。

$model->repeat()->weekly()->on(['sunday', 'monday', 'tuesday'])

4. 复杂重复。

这将帮助您创建任务的复杂重复规则。

$model->repeat()
    ->complex(
        year: '*',
        month: '*',
        day: '*',
        week: '*',
        weekOfMonth: '*',
        weekday: '*'
    )
示例
  1. 在每月第二个星期五重复模型。
$model->repeat()->complex(weekOfMonth: 2, weekday: Carbon::FRIDAY)
  1. 在每月的15号重复模型。
$model->repeat()->complex(day: 15)

模型作用域

使用whereOccurresOn作用域获取特定日期发生的模型。

Task::whereOccurresOn(Carbon::make('2023-05-01'))->get()

使用whereOccurresBetween作用域获取在两个特定日期之间发生的模型。

Task::whereOccurresBetween(Carbon::make('2023-05-01'), Carbon::make('2023-05-30'))->get()

1. 结束重复

使用endsAt在特定日期结束发生。

$model->repeat()->daily()->endsAt(
    Carbon::make('2023-06-01')
)

使用endsAfter在 n 次之后结束发生。

$model->repeat()->daily()->endsAfter($times);

2. 开始重复

使用startsAt方法在特定日期之后开始发生。

$model->repeat()->daily()->startsAt(
    Carbon::make()
)

测试

composer test

鸣谢

许可

MIT许可(MIT)。请参阅许可文件获取更多信息。