【发布时间】:2019-09-04 08:51:04
【问题描述】:
我已设置 Redis 来处理我的 Laravel 5.8 应用程序的作业。发送联系表单的电子邮件等基本工作可以正常工作,因为它只接受请求作为输入参数。
现在,当我尝试使用模型作为输入参数运行作业时,handle() 方法不会从数据库中加载模型,并且null 被提供给邮件构造函数。
例外:
Symfony\Component\Debug\Exception\FatalThrowableError: Argument 1 passed to App\Mail\OrderCreatedMail::__construct() must be an instance of App\Order, null given, called in /mnt/d/Weby/fts/app/Jobs/SendOrderMailJob.php on line 28 in /mnt/d/Weby/fts/app/Mail/OrderCreatedMail.php:16
数据:
{
objOrder: {
class: "App\Order",
id: 29,
relations: [
],
connection: "mysql"
},
job: null,
connection: null,
queue: null,
chainConnection: null,
chainQueue: null,
delay: null,
chained: [
]
}
控制器:
$objOrder = Order::create($objRequest->all());
SendOrderMailJob::dispatch($objOrder);
工作:
class SendOrderMailJob implements ShouldQueue {
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public $objOrder;
public function __construct(Order $objOrder) {
$this->objOrder = $objOrder;
}
public function handle() {
Mail::to($this->objOrder->email)->send(new OrderCreatedMail($this->objOrder));
}
}
邮件:
class OrderCreatedMail extends Mailable {
use Queueable, SerializesModels;
public $objOrder;
public function __construct(Order $objOrder) {
$this->objOrder = $objOrder;
}
public function build() {
return $this->from('MY_MAIL')
->replyTo('MY_MAIL')
->subject('MY_SUBJECT')
->markdown('emails/orders/created');
}
}
【问题讨论】:
-
在将它传递给调度之前尝试调用
$objOrder->fresh(),我之前遇到过这个问题::create -
没有帮助,同样的问题。
标签: laravel serialization model jobs