Laravel 一次添加多个作业
Laravel add multiple Jobs at a time
对于用户操作,我需要向他的所有订阅者发送电子邮件。在这种情况下,电子邮件应排队等待稍后发送。
我为此使用了作业,它一次可以接受单个用户实例(在 Laravel Doc 之后)并在作业 table 中插入一个作业。这个不错。
现在,由于订阅者数量不止一个,我如何在作业中一次添加多个用户实例或作业 table?在 Laravel 5.2 中,我该如何实现?
我不确定我在阅读你的问题时是否遗漏了什么,但是如果你正在实现自己的作业队列,你不能只更改构造函数以接受用户集合(数组)而不是在handle 方法只是 运行 一个 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(...);
}
}
}
对于用户操作,我需要向他的所有订阅者发送电子邮件。在这种情况下,电子邮件应排队等待稍后发送。
我为此使用了作业,它一次可以接受单个用户实例(在 Laravel Doc 之后)并在作业 table 中插入一个作业。这个不错。
现在,由于订阅者数量不止一个,我如何在作业中一次添加多个用户实例或作业 table?在 Laravel 5.2 中,我该如何实现?
我不确定我在阅读你的问题时是否遗漏了什么,但是如果你正在实现自己的作业队列,你不能只更改构造函数以接受用户集合(数组)而不是在handle 方法只是 运行 一个 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(...);
}
}
}