У меня проблема с заданием в очереди 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 говорится, что переменные должны быть объявлены защищенными в задании, я уже пробовал использовать их как общедоступные. Та же проблема. У меня уже нет идей. Что делаю не так ??
$this->subscribers = clone $s;
, просто посмотреть, что из этого получится? - person GTCrais   schedule 09.04.2019$this->subscribers = "whatever";
подтвердить / устранить проблему, связанную с параметром$s
. - person GTCrais   schedule 09.04.2019$this->subscribers
любое значение в конструкторе, значение будет нормально отображаться в обработчике. - person André Raubach   schedule 09.04.2019SerializesModels
и попробуйте вручную сериализовать / десериализовать подписчиков, чтобы увидеть, что произойдет ... это единственное, что я могу придумать. Однако он должен иметь возможность сериализовать коллекцию моделей Eloquent ... - person GTCrais   schedule 09.04.2019