【问题标题】:Laravel Mail queue different than Mail sendLaravel 邮件队列不同于邮件发送
【发布时间】:2018-07-26 06:32:49
【问题描述】:

我正在尝试使用简单的数据库队列驱动程序发送邮件。队列工作正常,但问题在于邮件内容。当我使用 send() 方法发送电子邮件时,一切都很好。内容是应该的,但是当尝试使用队列时,内容不是应该的,我从这段代码的第二行获取内容(但在排队邮件之前的第二行之后内容发生了变化):

        $mail->textPlain = strip_tags($request->content);
    $mail->textHtml = base64_encode($request->content);
    $mail->date = date("Y-m-d H:i:s");
    $mail->save();

    //This mail content will be sent
    $thread = $this->getThread($ticket, $request->content);
    $mail->textPlain = strip_tags($thread);
    $mail->textHtml = base64_encode($thread);

    Email::to($ticket->from)->queue(new Reply($mail));

使用队列时,我附加 $mail 对象的那部分未显示在最终消息中,最终消息是 - $mail->textHtml = base64_encode($request->content);。 但应该是- $thread = $this->getThread($ticket, $request->content); $mail->textPlain = strip_tags($thread); $mail->textHtml = base64_encode($thread);

$mail 是来自 Mail 模型的对象。

流程:我将输入的最后一个回复存储在数据库中,但传递给收件人的最终回复消息是线程中的所有消息。

reply.blade.php

{!! base64_decode($reply->textHtml) !!}

【问题讨论】:

  • 当模型排队时,基本上只存储一个标识符,当作业被处理时,它会从数据库中重新加载..任何没有被持久化的东西在检索时都不会在那里
  • 所以我只能排队保存的模型?

标签: php laravel


【解决方案1】:

当作业被序列化时,模型实例不会被序列化为当前对象的表示。基本上存储了一个标识符,用于在反序列化作业时从数据库中检索模型实例。 (类类型,要查询的 id 值,加载的关系,大致)

当从数据库中检索模型时,任何未持久化的内容都将不可用。

Illuminate\Queue\SerializesModels -> Illuminate\Queue\SerializesAndRestoresModelIdentifiers

如果您需要其他信息,可以在创建时将更多变量传递给 Job。

【讨论】:

    猜你喜欢
    • 2022-08-13
    • 2023-04-04
    • 2014-08-04
    • 2013-07-27
    • 1970-01-01
    • 2019-07-17
    • 2019-11-21
    • 2018-02-06
    • 2019-06-04
    相关资源
    最近更新 更多