每次创建或更新用户时,都会在达到某个时间戳时发送电子邮件。
我通过队列来控制它。每个队列都存储在"作业"表中。
该表有一个名为"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();
希望这有帮助