Laravel Notifications如何仅在toMail方法上设置Queue?

时间:2018-07-25 07:23:59

标签: laravel notifications laravel-5.6

我有一个带有三个频道('mail','sms','notification')的Notification类,

我也是Implements ShouldQueue的通知队列。

问题是我想仅在所有频道的默认排队系统集中使用队列仅邮件或仅用于其中两个

我应该怎么做?

这是我的通知代码:

class DocumentSendNotification extends Notification implements ShouldQueue
{
    use Queueable;

    protected $document;

    public function __construct($document)
    {
        $this->document = $document;
    }

    public function via($notifiable)
    {
        return ['database','mail', SmsChannel::class];
    }

    public function toMail($notifiable)
    {
     //something
    }

    public function toArray($notifiable)
    {
      //somecode
    }

    public function toSms($notifiable)
    {
       //somecode
    }

这是我延迟调用Notification类的代码:

Notification::send($users, (new DocumentSendNotification($event->document))->delay(Carbon::now()->addSeconds(30)));

预先感谢

2 个答案:

答案 0 :(得分:0)

将此添加到您的侦听器类中:

public $queue = 'YOUR_QUEUE_NAME';


public function queue(QueueManager $handler, $method, $arguments)
{
   $handler->push($method, $arguments, $this->queue);
}

答案 1 :(得分:0)

如果您知道要广播的方法,请执行以下操作:

在此示例中,我只想使用数据库

public function via($notifiable)
{
    return ['database'];
}

如果您不知道应该使用哪个广播(我是说它是动态的并且在程序中定义,并且对于用户或其他用户是可选的),请执行以下操作:

public function via($notifiable)
{

    $broadcasts = [];

       collect($userNotificationWay)->each(function ($item, $key) use (&$broadcasts) {
      
       $item && $key == 'get_email' ? array_push($broadcasts, 'mail' ) : null;
       $item && $key == 'get_sms' ? array_push($broadcasts, SmsChannel::class) : null;

    });

    return $broadcasts;
}

如果上述代码中的条件之一解决了它的广播集问题,并调用了发送方法,

希望会有所帮助