We have to mention that there is a package that does our workflow (or at least similar) for us. It is called Snooze.
It is a very simple package that allows you to do the following:
// Schedule a birthday notification$user->notifyAt(new BirthdayNotification, Carbon::parse($user->birthday)); // Schedule for a week from now$user->notifyAt(new NextWeekNotification, Carbon::now()->addDays(7)); // Schedule for new years eve$user->notifyAt(new NewYearNotification, Carbon::parse('last day of this year'));
By simply adding a trait to your User Model:
app/Models/User.php
use Thomasjohnkane\Snooze\Traits\SnoozeNotifiable;use Illuminate\Notifications\Notifiable; class User extends Model { use Notifiable, SnoozeNotifiable; // ...}
Once a message is scheduled - it will be picked up by an automatically registered command that runs every minute. Or you can run the command manually:
php artisan snooze:send
This package was also mentioned on Laravel News.
Hi, does this package use the laravel queue system under the hood?
Hi, no, it uses database and then sends it from a scheduled command