拉拉维尔,按用户 ID 删除队列作业



每次创建或更新用户时,都会在达到某个时间戳时发送电子邮件。

我通过队列来控制它。每个队列都存储在"作业"表中。

表有一个名为"payload"的列,该列是包含该作业所有信息的 json。就我而言,其有效载荷如下所示:

{  
   "job":"Illuminate\Queue\CallQueuedHandler@call",
   "data":{  
      "commandName":"Illuminate\Mail\SendQueuedMailable",
      "command":"O:34:"Illuminate\Mail\SendQueuedMailable":1:{s:11:"u0000*u0000mailable";O:16:"App\Mail\Expired":16:{s:7:"u0000*u0000user";O:45:"Illuminate\Contracts\Database\ModelIdentifier":2:{s:5:"class";s:8:"App\User";s:2:"id";i:1020;}s:4:"from";a:0:{}s:2:"to";a:1:{i:0;a:2:{s:7:"address";s:24:" example@gmail.com"";s:4:"name";N;}}s:2:"cc";a:0:{}s:3:"bcc";a:0:{}s:7:"replyTo";a:0:{}s:7:"subject";N;s:4:"view";N;s:8:"textView";N;s:8:"viewData";a:0:{}s:11:"attachments";a:0:{}s:14:"rawAttachments";a:0:{}s:9:"callbacks";a:0:{}s:10:"connection";N;s:5:"queue";N;s:5:"delay";N;}}"
   }
}

如您所见,有工作与:App\User";s:2:"id";i:1020

相关联

如何通过该用户 ID 从表中删除该作业?我可以使用 DB::table('jobs) 和循环获取所有数据,直到我在 payload 中找到 id 并将其删除,但是 Laravel 有任何助手或功能可以做到这一点吗?

您可以json_decode有效负载并反序列化$payload['data']['command']

    $job = DB::table('jobs')->whereId($id)->first();
    $payload = json_decode($job->payload);
    $mailable = unserialize($payload['data']['command']);
    if ($mailable->user->id != GOOD)
        DB::table('jobs')->whereId($id)->delete();

希望这有帮助

最新更新