Laravel,通过用户ID删除队列作业

时间:2019-07-23 15:10:12

标签: json laravel laravel-queue

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

我通过队列来控制。每个队列都存储在“工作”表中。

该表具有称为“有效载荷”的列,该列是包含该作业的所有信息的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是否有任何帮助程序或函数来做到这一点?

1 个答案:

答案 0 :(得分:1)

您可以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();

希望这会有所帮助