Laravel Queue Job выдает ошибку Модель не найдена - PullRequest
1 голос
/ 31 мая 2019

Я создал файл задания и отправляю почту через контроллер с использованием mailable, он создаст запись в таблице заданий, но через несколько секунд он перенесет запись в таблицу failed_jobs и выдаст модель ошибки, не найденную

Способ отправки контроллера

if (!empty($emails) && isset($result->email)) {
                dispatch(new SendNotificationEmailJob($emails, $result, 'WarehouseAddUpdate', array($subject, $request['number'], 'add')));
        }

SendNotificationEmailJob Class

<?php

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;
use Illuminate\Support\Facades\Mail;

class SendNotificationEmailJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $emails;
    protected $result;
    protected $mailClass;
    protected $data;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct($emails, $result, $mailClass, $data)
    {   
        $this->emails = $emails;
        $this->result = $result;
        $this->mailClass = 'App\Mail\\'.$mailClass;
        $this->data = $data;        
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {           
        if ($this->result == null) {
            if (!empty($this->emails)) {            
                $to = $this->emails[0];    
                unset($this->emails[0]);
            }
        }else{
            if($this->result != null && isset($this->result->email)){                
                $to = $this->result->email;
                if (($key = array_search($this->result->email, $this->emails)) !== false) {
                    unset($this->emails[$key]);
                }            
            }
        }

        if (!empty($this->emails) && isset($result->email)) { 
            $email = new $this->mailClass($this->data);           
            Mail::to($to)->cc($this->emails)->send($email);            
        }

        if (empty($emails) && isset($result->email)) {
            $email = new $this->mailClass($this->data);
            Mail::to($to)->send($email);
        }        
    }
}

Класс почты

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

class WarehouseAddUpdate extends Mailable
{
    use Queueable, SerializesModels;

    /**
     * The data object instance.
     *
     * @var data
     */
    public $subject;

    public $warehouse;

    public $type;

    public $oldstatus;

    public $newstatus;

    public $receiver;


    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($data)
    {
        $this->subject = $data[0];
        $this->warehouse = $data[1];
        $this->type = $data[2];
        $this->oldstatus = $data[3] ?? null;
        $this->newstatus = $data[4] ?? null;
        $this->receiver = 'Manager';
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->markdown('mails.warehouseaddupdate')->subject($this->subject);
    }
}

это мой класс SendNotificationEmail

<?php

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;
use Illuminate\Support\Facades\Mail;

class SendNotificationEmailJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $emails;
    protected $result;
    protected $mailClass;
    protected $data;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct($emails, $result, $mailClass, $data)
    {   
        $this->emails = $emails;
        $this->result = $result;
        $this->mailClass = 'App\Mail\\'.$mailClass;
        $this->data = $data;        
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {           
        if ($this->result == null) {
            if (!empty($this->emails)) {            
                $to = $this->emails[0];    
                unset($this->emails[0]);
            }
        }else{
            if($this->result != null && isset($this->result->email)){                
                $to = $this->result->email;
                if (($key = array_search($this->result->email, $this->emails)) !== false) {
                    unset($this->emails[$key]);
                }            
            }
        }

        if (!empty($this->emails) && isset($result->email)) { 
            $email = new $this->mailClass($this->data);           
            Mail::to($to)->cc($this->emails)->send($email);            
        }

        if (empty($emails) && isset($result->email)) {
            $email = new $this->mailClass($this->data);
            Mail::to($to)->send($email);
        }        
    }
}

Ошибка, обнаруженная в таблице БД failed_jobs

Подсветка \ База данных \ Eloquent \ ModelNotFoundException: нет результатов запроса для модели [Приложение \ Модель \ V1 \ Пользователь]. в /var/www/html/smartcgd/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php:416 Трассировка стека:

0 /var/www/html/smartcgd/vendor/laravel/framework/src/Illuminate/Queue/SerializesAndRestoresModelIdentifiers.php(54):

Осветите \ Database \ Eloquent \ Builder-> firstOrFail ()

1 /var/www/html/smartcgd/vendor/laravel/framework/src/Illuminate/Queue/SerializesModels.php(41):

App \ Вакансии \ SendNotificationEmailJob-> getRestoredPropertyValue (Object (Осветить \ Договоров \ Database \ ModelIdentifier))

2 [внутренняя функция]: App \ Jobs \ SendNotificationEmailJob -> __ wakeup ()

3 /var/www/html/smartcgd/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(42):

десериализации ( 'O: 33: "App \ Вакансии \ ...')

4 /var/www/html/smartcgd/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(76):

Осветите \ Queue \ CallQueuedHandler-> вызова (Object (Осветите \ Queue \ Вакансии \ DatabaseJob), Array)

5 /var/www/html/smartcgd/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(320):

Осветите \ Queue \ Вакансии \ job-> огонь ()

6 /var/www/html/smartcgd/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(270):

Осветите \ Queue \ рабоче> процесс ( 'база данных', Объект (Осветите \ Queue \ Вакансии \ DatabaseJob), Объект (Осветите \ Queue \ WorkerOptions))

7 /var/www/html/smartcgd/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(114):

Осветите \ Queue \ рабоче> runJob (Object (Осветите \ Queue \ Вакансии \ DatabaseJob), 'database', Object (Illuminate \ Queue \ WorkerOptions))

8 /var/www/html/smartcgd/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(101):

Подсветка \ Queue \ Worker-> daemon («база данных», «по умолчанию», Объект (Осветите \ Queue \ WorkerOptions))

9 /var/www/html/smartcgd/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(85):

Подсветка \ Queue \ Console \ WorkCommand-> runWorker ('база данных', 'по умолчанию')

10 [внутренняя функция]: Подсветка \ Queue \ Console \ WorkCommand-> handle ()

11 /var/www/html/smartcgd/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(29):

call_user_func_array (Array, Array)

12 /var/www/html/smartcgd/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(87):

Осветите \ Container \ BoundMethod :: Осветите \ Container {закрытие} ()

13 /var/www/html/smartcgd/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(31):

Осветите \ Контейнер \ BoundMethod :: callBoundMethod (Object (Осветите \ Foundation \ Application), Массив, Объект (Закрытие))

14 /var/www/html/smartcgd/vendor/laravel/framework/src/Illuminate/Container/Container.php(549):

Осветить \ Container \ BoundMethod :: вызов (Object (Осветите \ Foundation \ Application), Array, Array, NULL)

15 /var/www/html/smartcgd/vendor/laravel/framework/src/Illuminate/Console/Command.php(183):

Осветите \ Контейнер \ container-> вызов (Array)

16 /var/www/html/smartcgd/vendor/symfony/console/Command/Command.php(252):

Осветите \ Console \ Command-> Execute (Object (Symfony \ Component \ Console \ Input \ ArgvInput), Объект (Осветите \ Console \ OutputStyle))

17 /var/www/html/smartcgd/vendor/laravel/framework/src/Illuminate/Console/Command.php(170):

Symfony \ Component \ Console \ Command \ Command-> Run (Object (Symfony \ Component \ Console \ Input \ ArgvInput), Объект (Осветите \ Console \ OutputStyle))

18 /var/www/html/smartcgd/vendor/symfony/console/Application.php(946):

Осветите \ Console \ Command-> Run (Object (Symfony \ Component \ Console \ Input \ ArgvInput), Объект (Symfony \ Component \ Console \ Output \ ConsoleOutput))

19 /var/www/html/smartcgd/vendor/symfony/console/Application.php(248):

* +1093 * Symfony \ Component \ консоли \ Приложения-> doRunCommand (Объект (Осветите \ Очередь \ консоли \ WorkCommand), Объект (Symfony \ Component \ консоли \ вход \ ArgvInput), Объект (Symfony \ Component \ Console \ Output \ ConsoleOutput))

20 /var/www/html/smartcgd/vendor/symfony/console/Application.php(148):

* * Symfony 1 097 \ Компонент \ консоли \ Приложения-> doRun (Объект (Symfony \ Component \ консоли \ вход \ ArgvInput), Объект (Symfony \ Component \ Console \ Output \ ConsoleOutput))

21 /var/www/html/smartcgd/vendor/laravel/framework/src/Illuminate/Console/Application.php(88):

Symfony \ Component \ Console \ Application-> Run (Object (Symfony \ Component \ Console \ Input \ ArgvInput), Объект (Symfony \ Component \ Console \ Output \ ConsoleOutput))

22 /var/www/html/smartcgd/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(121):

Осветите \ Console \ Application-> Run (Object (Symfony \ Component \ Console \ Input \ ArgvInput), Объект (Symfony \ Component \ Console \ Output \ ConsoleOutput))

23 / var / www / html / smartcgd / artisan (37): подсветить дескриптор \ Foundation \ Console \ Kernel-> (объект (Symfony \ Component \ Console \ Input \ ArgvInput),

Объект (Symfony \ Component \ консоли \ Выход \ ConsoleOutput))

24 {main}

...