Laravel一次添加多个作业

时间:2016-04-07 18:39:28

标签: php email laravel-5 queue jobs

对于用户操作,我需要向其所有订阅者发送电子邮件。在这种情况下,电子邮件应排队等待稍后发送。

我为此使用了作业,它可以一次接受单个用户实例(遵循Laravel Doc)并在作业表中插入作业。这很好。

现在,由于订阅者数量多于一个,如何在作业表中一次添加多个用户实例或作业?在Laravel 5.2中,我该如何实现?

1 个答案:

答案 0 :(得分:0)

我不确定我是否通过阅读您的问题在这里遗漏了一些内容,但是如果您正在实现自己的作业队列,那么您无法改变构造函数来接受用户的集合(数组)而不是句柄方法只是运行一个foreach,它会通过电子邮件发送给他们?

Laravel文档中的示例已修改为接受用户集合而非单个用户:

<?php


namespace App\Jobs;

use App\User;
use App\Jobs\Job;
use Illuminate\Contracts\Mail\Mailer;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;

class SendReminderEmail extends Job implements ShouldQueue
{
  use InteractsWithQueue, SerializesModels;

protected $users = [];

/**
 * Create a new job instance.
 *
 * @param  User  $user
 * @return void
 */
public function __construct($users) //Pass in an array of your user objects
{
    $this->users = $users;
}

/**
 * Execute the job.
 *
 * @param  Mailer  $mailer
 * @return void
 */
public function handle(Mailer $mailer)
{
  foreach($users as $currentUser){
      $mailer->send('emails.reminder', ['user' => $currentUser], function ($){
        //code here
    });

    $currentUser->reminders()->create(...);
   }
  }
}