我试图让我的后端每天发送一个接近指定日期的通知。
例如,如果我的用户添加日期“13-07-2020”,他应该收到通知“您的截止日期是1天!” (因为今天是 12 点)。
我已经在 Laravel 的文档中阅读了关于“任务调度”的部分,但我不确定如何以这种方式实现它,每个用户都会收到自己的通知。
怎么可能做到这一点?该文档指出:“Laravel 的命令调度程序允许您在 Laravel 本身内流畅而富有表现力地定义您的命令调度。” 所以,它让我相信它只是为了命令。
我会用 Laravel 命令来解决这个问题。
创建命令
要创建命令,您可以运行:
php artisan make:command NotifyUsers
Run Code Online (Sandbox Code Playgroud)
这将创建NotifyUsers命令。在该handle()命令的功能中,您可以向每个设置了截止日期的用户发送消息。
php artisan make:command NotifyUsers
Run Code Online (Sandbox Code Playgroud)
我将命令的签名设置为以下内容:
public function handle() {
$users = User::whereNotNull('deadline_date')->get();
foreach($users as $user) {
$diffInDays = $user->deadline_date->diff(Carbon::now())->days;
$user->notify("Your deadline is in $diffInDays day!");
}
}
Run Code Online (Sandbox Code Playgroud)
这意味着您可以通过运行来调用命令
php artisan users:notify
Run Code Online (Sandbox Code Playgroud)
调度命令
在Console/Kernel.php课堂上,您可以安排命令。首先,您应该将其添加到$commands数组中:
protected $signature = 'users:notify';
Run Code Online (Sandbox Code Playgroud)
在该schedule()函数中,您可以安排命令每天运行一次。
php artisan users:notify
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3656 次 |
| 最近记录: |