首页 > 解决方案 > 使用数据库驱动程序在 Laravel 队列中获取作业 ID

问题描述

我有一个从控制器创建的 laravel 作业,有时我想删除这些作业,因为时间将被重新安排 这是一个通知作业,它在上课前一小时发送通知,如果课程被重新安排,我需要删除工作并插入新工作

我的控制器代码如下

$job = (new OnlineClassRemainderJob($remainder_data))->delay($value);
$id = dispatch($job);
array_push($job_ids, $id);

Job类如下图

<?php

namespace App\Jobs;

use App\Mail\OnlineClassRemainderMail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Mail;

class OnlineClassRemainderJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $details;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($details)
{
$this->details = $details;

}

/**
* Execute the job.
*
* @return void
*/
public function handle()
{

Mail::to($this->details['email'])
->send(new OnlineClassRemainderMail($this->details));

}
}

请说明我如何获取作业 ID,以便我可以将其保存在数据库中,并且在重新安排的情况下,我可以删除与该类相关的所有作业 ID,然后发送新的安排

我可以在这里布置场景

例如,我正在安排课程

我从 1 月 20 日到 1 月 25 日每天上午 10 点上课,我正在安排剩余邮件发送作业,该作业将在上课前 1 小时触发

但在某些情况下,课程将被重新安排,为此我需要重新安排剩余时间或删除并重新分配工作

标签: phplaravelqueue

解决方案


您需要使用此功能从作业中重新运行作业 ID$this->job->getJobId();

class OnlineClassRemainderJob implements ShouldQueue
{
     use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
       Mail::to($this->details['email'])
               ->send(new OnlineClassRemainderMail($this->details));
       retrun $this->job->getJobId();
    }
}

然后

$job = (new OnlineClassRemainderJob($remainder_data))->delay($value);
$id = dispatch($job);
array_push($job_ids, $id);

参考链接https://laravel.com/api/8.x/Illuminate/Contracts/Queue/Job.html#method_getJobId


推荐阅读