【发布时间】:2019-04-08 21:42:45
【问题描述】:
我在使用 Laravel 5.6 排队作业时遇到问题。我将 3 个参数传递给构造函数。至此,我查了一下,所有的论据都有数据了。但是当我运行作业时,其中一个在处理程序中是空的。
这是调度作业的函数:
public function send() {
$event = Evento::find($id);
$subscribers = ParticipantesEvento::join('users', 'participantes_eventos.user_id', '=', 'users.id')
->select('users.name', 'users.email')
->where('evento_id', '=', $evento->id)
->get();
$certificate = Certificado::where('evento_id', '=', $evento->id)->first();
dispatch(new SendCertificatesByEmail($subscribers, $event, $certificate));
return redirect()->back()->with('success', 'Fazendo os paranauê...');
}
这是工作:
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
class SendCertificatesByEmail implements ShouldQueue {
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $subscribers, $events, $certificate;
public function __construct($s, $e, $c) {
$this->subscribers = $s;
$this->events = $e;
$this->certificate = $c;
print_r($this->subscribers); // Have data
print_r($this->events); // Have data
print_r($this->certificate); // Have data
}
public function handle() {
print_r($this->subscribers); // IS EMPTY!!!
print_r($this->events); // Have data
print_r($this->certificate); // Have data
}
}
虽然 Laravel 的文档说要在作业中将变量声明为受保护的,但我也已经尝试将它们设为 public。同样的问题。我已经没有想法了。我做错了什么??
【问题讨论】:
-
你能不能试试把
$this->subscribers = clone $s;,看看会发生什么? -
@GTCrais 试过了。不工作... =/
-
如果有帮助...这两个变量都是来自数据库的信息。有问题的变量和其他变量之间的唯一区别是它是一个集合,有很多订阅者。另外两个只有一个注册(一个事件和一个证书)。
-
尝试
$this->subscribers = "whatever";确认/消除$s参数中的问题。 -
我已经做过这个测试。在构造函数中为
$this->subscribers分配任何“任何”值,该值在处理程序中正常显示。
标签: php laravel queue laravel-queue