Laravel имеет удобную функцию, которая идеально подходит для вашего случая, она называется Планирование задач , вместо того, чтобы перевести задание в спящий режим на один час, вместо этого вы могли бы вызывать его каждый час.
Для этого добавьте расписание работы к методу schedule()
, расположенному на App\Console\Kernel
, например:
protected function schedule(Schedule $schedule)
{
$schedule->job(new SendReminderEmail)->hourly();
}
Я бы также порекомендовал вам сделать работу автономной, что значительно упростит эту задачу, я думаю примерно так:
class SendReminderEmail implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public $event;
public $users;
public function __construct()
{
$this->users = User::all();
$this->event = (object)['content' => "Hello Laravel fans",'subject' => 'Test Email'];;
}
public function handle()
{
foreach ($this->users as $user) {
Mail::to($user->email)->queue(new Reminder($this->event));
}
}
}
Теперь вы можете просто избавиться от своего контроллера, потому что это задание будет выполняться каждый час автоматически.
Помните, что вам нужно будет запустить cron на вашем сервере, чтобы проверить, нужно ли выполнять задание. Вы также можете запустить его вручную, если вы хотите проверить его, используя php artisan schedule:run
.
Надеюсь, это поможет вам.