将自定义作业添加到Laravel

时间:2017-05-10 20:06:40

标签: laravel command

我在Laravel应用程序中有一些用户。

每个用户设置保存在数据库中的时间(小时和分钟)以发送电子邮件。

我已经做了什么:

我有一个每分钟执行一次的命令:

$schedule->command(check_emails)->everyMinute();

如果用户设置为当时发送电子邮件,则会发送。

有没有办法自动设置命令在用户设置时发送电子邮件而不是每分钟从数据库中检查一次?

1 个答案:

答案 0 :(得分:1)

您可以使用命令传递参数。设置控制台命令的签名,如下所示。

protected $signature = 'check_emails {time}';

这里的时间是传递给控制台命令的参数。可以是存储在数据库中的值的分钟或小时。

$schedule->command('check_emails minute')->everyMinute();
$schedule->command('check_emails hour')->hourly();

这两个时间表将帮助您找到每分钟都喜欢每小时发送电子邮件和电子邮件的用户。因此,您的代码可以为单独查找用户提供条件。由于您正在利用参数,因此无需创建两个函数。

在您的控制台命令中,句柄代码可能会显示此内容。

$time = $this->argument('time');
// Get the users who set send_email_time at $time
$users = User::where('send_email_time', $time)->get();
// ...
// Code to send email to $users
// ...