使用Laravel Mail :: later时,对象丢失

luk*_*rat 4 queue laravel

我有这个代码:

$data = ['user'=>User::find(1)];
Mail::later(5, 'email.template', $data, function($message){
  ...
})
Run Code Online (Sandbox Code Playgroud)

email.template有这样的:

print_r($user)
Run Code Online (Sandbox Code Playgroud)

当我收到电子邮件时,$ user的实例不是User对象.怎么会发生这种情况?就好像对象没有引用正确的上下文.但是当我使用Mail :: send时它工作正常.这里有点困惑.

Jos*_*ber 11

对于队列的工作来说,Eloquent模型太大了,通常限制为64kb.

我建议你使用常规队列作业,将你的用户ID传递给它,然后从那里发送电子邮件:

$user_id = 1;

Queue::later(5, function () use ($user_id) {
    $data = ['user' => User::find($user_id)];

    Mail::send('email.template', $data, function ($message) {
        // ......
    });
});
Run Code Online (Sandbox Code Playgroud)