使用延迟选项取消队列中的作业(数据库驱动程序)

Cancel job in queue (database driver) with late option

我有一个系统可以预订带合同的房屋​​租赁(所有条款和条件)。

我将工作放入队列中,一封包含所有条款和条件(日期等)的电子邮件在创建预订时发送,另一封延迟发送,以便在入住前 2 天通知客户。

但如果我更改预订信息(例如日期),我需要取消队列中的任务。

我该怎么做?我使用数据库驱动程序。

BookingController 中有一行:

dispatch( new ReminderMailJob( $booking, $booking->customer ) )->delay( Carbon::parse( $booking->ends_at )->subDays( 3 ) );

我的数据库“工作”有一个屏幕table

如何 select 这一行并将其删除?

提前致谢

使用Task Scheduling

点赞artisan command

class SendReminers extends Command
{
    protected $signature = 'booking:send-reminders';

    protected $description = 'Send a reminders email to a users';

    public function handle()
    {
        Booking::where(*your query*)
          ->each(fn($booking) => ReminderMailJob::dispatch($booking, $booking->customer)->now());
    }
}

比计划任务,例如,五分钟

$schedule->command('booking:send-reminders')->everyFiveMinutes();

现在仅针对与任务执行时刻相关的预订发送提醒。