sinclairt/schedulable

使用schedulable安排任何对象

2.0.1 2017-03-29 12:29 UTC

This package is not auto-updated.

Last update: 2024-09-28 19:58:23 UTC


README

安装

  • 运行 composer require sinclairt/schedulable
  • config\app.php 文件中的 providers 数组中注册 Sinclair\Schedulable\Providers\SchedulableServiceProvider::class
  • 运行 composer dump-autoload
  • 运行 php artisan vendor:publish。这将发布调度迁移。
  • 运行 php artisan migrate

用法

在您的模型中使用 IsSchedulable trait。这将为您提供访问一系列作用域和方法。

创建调度

使用辅助方法流畅地构建您的调度。

schedule($object)->daily()->hour(10)->minute(0)->save();
更新调度

如果您的对象已经附加了调度,那么当您进行更改并保存时,更改将应用于现有的调度。

可用字段
 minutely()
 hourly()
 daily()
 weekly()
 monthly()
 annually()
 quarterly()
 adhoc()
 isMinutely()
 isHourly()
 isDaily()
 isWeekly()
 isMonthly()
 isAnnually()
 isQuarterly()
 isAdhoc()
 minute( $value = null )
 hour( $value = null )
 dayOfWeek( $value = null )
 dayOfMonth( $value = null )
 monthOfYear( $value = null )
 year( $value = null )
 isLastDayOfMonth( $value = null )
 frequencyN( $value = null )
 startsAt( $value = null )
 expiresAt( $value = null )
动态设置/获取

此工厂使用动态方法,因此请注意,例如,调用 schedule($object)->hour() 将返回调度工厂上存储的当前小时,然而,调用 schedule($object)->hour(10) 将将小时属性设置为 10 并返回工厂以便您继续链式调用。

开始时间/到期时间

您可以设置调度何时开始和结束,这是可选的。活动的/过期的作用域将注意这些字段。

快捷方式

loadFromSchedule($schedule = null) - 这将加载从提供的调度到工厂的所有属性。它还将工厂的调度对象设置为提供的调度。如果没有提供调度,则将使用当前附加的调度,即

schedule($objectWithoutSchedule)->loadFromSchedule($anotherSchedule);
// or
schedule($objectWithoutSchedule)->setSchedule($schedule)->loadFromSchedule();

resetSchedule() - 将将所有属性重置为其默认值,无论与工厂附加的对象。

refresh() - 将返回一个包含当前对象的工厂的新实例。

loadFromCron($string) - 将从cron表达式设置属性到工厂。您可以使用伪表达式

  • @annually
  • @monthly
  • @weekly
  • @daily
  • @hourly
获取日期

您可以得到 next() 日期,previous() 日期,nextRunDates($n)previousRunDates($nth)(其中 $n 是所需的日期数量,即 3)。您还可以使用 runDatesBetween(Carbon $from, Carbon $to, bool $active = true) 获取两个日期之间的潜在运行日期。

运行调度

当一个调度已运行时,运行 hasRun() 方法是个好主意,因为这将更新 last_run_atnext_runs_at 时间戳。

作用域

有大量可供您使用的范围


dueOn( Carbon $dt, $active = true )
isNow()
isMinutely()
isHourly()
isDaily()
isWeekly()
isMonthly()
isAnnually()
isQuarterly()
isAdhoc()
between( Carbon $dtFrom, Carbon $dtTo = null, $active = true )
day( Carbon $dt )
dayBetween( Carbon $dtFrom, Carbon $dtTo = null )
dayOfMonth( int $day )
dayOfMonthBetween( Carbon $dtFrom, Carbon $dtTo = null )
dayOfWeek( int $day )
dayOfWeekBetween( Carbon $dtFrom, Carbon $dtTo = null )
lastOfMonth( Carbon $dt )
month( int $month )
monthBetween( int $from, int $to )
year( int $year )
yearBetween( int $from, int $to )
hour( int $hour )
hourBetween( int $from, int $to )
minute( int $minute )
minuteBetween( int $from, int $to )
isActive( Carbon $dt = null )
isActiveBetween( Carbon $dtFrom, Carbon $dtTo = null )
isExpired( Carbon $dt = null )

免责声明

尽管已经投入了大量时间和精力来制作 between 作用域和方法,但它确实有其局限性,因为日期是在运行时计算的,所以使用它们时请小心,因为它们可能导致脚本中的内存故障。

其他方法

  • hasSchedule() - 确定您的对象是否附加了调度
  • isDue( Carbon $dt = null ) - 调度在特定日期到期,或者如果 $dt 为空则现在到期。
  • getScheduleType( $schedule ) -(在调度模型上)
  • allRunDatesBetween( Carbon $dtFrom, Carbon $dtTo = null, $active = true ) -(在调度模型上)- 所有调度可能运行的日期。
  • setSchedule() -(调度工厂)
  • getSchedule() -(调度工厂)
  • setObject() -(调度工厂)
  • getObject() -(调度工厂)
  • load() - (调度工厂) - 这将获取当前对象的调度并将所有属性设置好。