sinclairt / schedulable
使用schedulable安排任何对象
Requires
- mtdowling/cron-expression: ^1.1
- nesbot/carbon: ^1.21
Requires (Dev)
- laracasts/testdummy: ~2.0
- laravel/laravel: dev-develop
- phpspec/phpspec: ~2.1
- phpunit/phpunit: ~4.0
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_at
和 next_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()
- (调度工厂) - 这将获取当前对象的调度并将所有属性设置好。