php - 使用数据库驱动程序在 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 小时触发
但在某些情况下,课程将被重新安排,为此我需要重新安排剩余时间或删除并重新分配工作
解决方案
您需要使用此功能从作业中重新运行作业 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
推荐阅读
- c# - 在其他方法中无法访问变量
- php - PayPal IPN 总是返回 INVALID?
- reactjs - 在反应中动态添加和删除输入字段
- google-bigquery - 查找要插入 BigQuery 的列名
- regex - 从逗号分隔的 cel 中仅获取 X 个字符串
- 64-bit - 在 Solaris 10 上将 pcre 3.38 编译为 64 位 - 错误的 ELF 类
- python - NLTK POS 标签:如何将“Word”及其对应的“POS 标签”放入 DataFrame
- r - 子集只会不断增加值到最大值
- ruby - Ruby:我用 JavaScript 编写的程序在 Ruby 中的工作方式不同
- c# - System.Diagnostics.Process.HasExited 始终返回 true,并且 Process.Exited 事件处理程序始终在进程仍处于打开状态时命中