使用 Cadence 为 Laravel 实现基于模型的调度

最后更新于 经过

基于模型的 Laravel 调度与 Cadence 图片

节奏 经过 史蒂夫·鲍曼 Laravel 的调度方式有所不同。它并非将所有定时任务集中在一个调度文件中,而是允许你将一个或多个调度直接附加到单独的 Eloquent 模型实例上,每个实例都有自己的表达式和时区,并在到期时触发事件。

工作原理

安装软件包并发布迁移后,您将获得 schedules 包含对任何模型的多态引用、调度表达式、可选时区和预计算值的表 next_run_at / last_run_at 时间戳。

添加 Schedulable 接口和 HasSchedules 添加到您想要安排的任何模型的特征:

使用 DirectoryTree\Cadence\HasSchedules ;
使用 目录树\Cadence\可调度 ;
班级 订阅 延伸 模型 实现 可调度
{
使用 HasSchedules ;
}

然后将计划任务附加到模型实例。Cadence 自带 cron 表达式和 RRULE 模式的驱动程序,您可以选择要安装的库:

# 用于 cron 表达式
作曲家 要求 dragonmantank/cron-expression
# 对于 RRULE(选择一项)
作曲家 要求 rlanvin/php-rrule
# 或者
作曲家 要求 simshaun/recurr

基于 cron 的调度程序很简单:

使用 目录树\Cadence\驱动程序\CronSchedule ;
// 此订阅费用将于每月1日午夜收取
订阅 -> 添加日程 新的 定时任务计划 '0 0 1 * *' ));

对于更丰富的重复执行需求,RRULE 提供了更多控制 cron 中难以表达的内容的方法:

使用 目录树\Cadence\驱动程序\规则计划 ;
每两周的周二和周四
订阅 -> 添加日程 新的 规则表 'FREQ=每周;INTERVAL=2;BYDAY=周二,周四' ));

日程安排会考虑时区,因此不同地区的用户都能获得正确的当地时间:

订阅 -> 添加日程
新的 定时任务计划 '0 8 * * 1' , 澳大利亚/悉尼 // 悉尼时间周一上午 8 点
(英文):

调度与反应

Cadence 提供了一种 schedules:run 使用 Artisan 命令向 Laravel 的调度器注册,使其每分钟运行一次:

// routes/console.php
日程 :: 命令 'schedules:run' -> 不重叠 () -> 每分钟 ();

每次运行时,它都会找到所有记录 next_run_at 逾期未付,解雇 ScheduleTriggered 每次事件发生后,都会触发下一次事件。您的应用程序通过监听器做出响应:

使用 DirectoryTree\Cadence\Events\ScheduleTriggered ;
班级 处理到期订阅
{
民众 功能 处理 定时触发 $event) : 空白
{
订阅 = $事件 -> 日程 -> 可安排的;
订阅 -> 流程续订 ();
}
}

该事件包含日程记录,使您可以访问父模型、表达式和时间戳,以便按模型类型进行分支或记录运行的内容和时间。

可扩展性

如果 cron 和 RRULE 都不合适,您可以通过扩展基础驱动程序来实现自定义驱动程序。 Schedule 类和实现 resolveNextOccurrence() ,它收到一个 CarbonInterface 并返回下一个匹配项。驱动程序按名称注册,因此以后更换或续订驱动程序非常简单。

您可以访问[此处插入链接]了解更多信息并查看源代码。 GitHub

Yannick Lyn Fatt 的照片

Laravel News 的特约撰稿人和全栈 Web 开发人员。

归档于:
立方体

Laravel 时事通讯

加入超过 4 万名开发者的行列,不错过任何新的技巧、教程等内容。

图像
了解软科技

以每小时 20 美元的价格聘请具备人工智能专业知识的 Laravel 开发人员。48 小时内即可开始工作。

访问 Acquaint Softtech
了解 Softtech 的标志

了解软科技

Acquaint Softtech 提供 AI 就绪的 Laravel 开发人员,48 小时内即可上手,每月费用为 3000 美元,没有冗长的销售流程,并提供 100% 退款保证。

了解软科技
Lucky Media 标志

幸运传媒

Get Lucky Now——拥有十余年经验的 Laravel 开发理想之选!

幸运传媒
Shift 标志

转移

还在运行旧版本的 Laravel?立即实现 Laravel 自动升级和代码现代化,让您的应用程序保持最新状态。

转移
绝不妥协标志

绝不妥协

来自 No Compromises 播客的两位经验丰富的开发者 Joel 和 Aaron 现在可以为您的 Laravel 项目提供服务。⬧ 固定费用 9500 美元/月。⬧ 无冗长的销售流程。⬧ 无需签订合同。⬧ 100% 退款保证。

绝不妥协
鱼叉:新一代时间跟踪和发票标志

Harpoon:新一代时间跟踪和发票系统

新一代时间跟踪和计费软件,帮助您的机构规划和预测盈利的未来。

Harpoon:新一代时间跟踪和发票系统
PhpStorm 标志

PhpStorm

首选的 PHP IDE,对 Laravel 及其生态系统提供广泛的开箱即用支持。

PhpStorm
Laravel Cloud 标志

Laravel 云

轻松创建和管理服务器,并在几秒钟内部署 Laravel 应用程序。

Laravel 云
Tinkerwell 徽标

廷克威尔

Laravel 开发者必备的代码运行器。可在本地和生产环境中体验 AI、自动补全和即时反馈功能。

廷克威尔
SaaSykit:Laravel SaaS 入门套件徽标

SaaSykit:Laravel SaaS 入门套件

SaaSykit 是一个多租户 Laravel SaaS 入门套件,包含运行现代 SaaS 所需的所有功能,例如支付、美观的结账界面、管理面板、用户仪表盘、身份验证、现成组件、统计数据、博客、文档等等。

SaaSykit:Laravel SaaS 入门套件
Kirschbaum 标志

樱桃树

提供创新和稳定性,确保您的Web应用程序取得成功。

樱桃树
工具包:适用于 Laravel AI SDK 镜像的可重用 AI 工具

工具包:适用于 Laravel AI SDK 的可重用 AI 工具

阅读文章
Laracon US 2026 公布完整扬声器阵容图片

Laracon US 2026 公布完整演讲嘉宾阵容

阅读文章
PHP 2026 年发展状况调查现已开放(图片)

《2026年菲律宾比索发展状况调查》现已开放

阅读文章
使用 Laradocs 镜像在 Laravel 应用中实现版本控制文档

使用 Laradocs 在 Laravel 应用中实现版本控制文档

阅读文章
Laravel 13.15.0 中的类型化翻译访问器

Laravel 13.15.0 中的类型化翻译访问器

阅读文章
刷新 Laravel 数据库而不删除所有表图片

无需删除所有表即可刷新 Laravel 数据库

阅读文章