Я бы подошел к этому с помощью Laravel команд.
Создание команды
Чтобы создать команду, вы можете запустить:
php artisan make:command NotifyUsers
Это создает команду NotifyUsers
. В функции handle()
команды вы можете отправить сообщение каждому пользователю, у которого установлен крайний срок.
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!");
}
}
Я установил подпись команды следующим образом:
protected $signature = 'users:notify';
Это означает, что вы можете вызвать команду, запустив
php artisan users:notify
Планирование команды
В классе Console/Kernel.php
вы можете запланировать выполнение команды. Сначала вы должны добавить его в массив $commands
:
protected $commands = [
NotifyUsers::class,
];
А в функции schedule()
вы можете запланировать выполнение команды один раз в день.
protected function schedule(Schedule $schedule) {
// Here you can execute the command once every day
$schedule->command('users:notify')->dailyAt('14:00');
}