【问题标题】:Laravel job not deserializing modelLaravel 作业不反序列化模型
【发布时间】: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


【解决方案1】:

composer dump-autoload 修复了这个问题。但我不知道为什么......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-08
    • 2019-01-30
    • 2019-02-24
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    相关资源
    最近更新 更多