vendredi 31 mai 2019

Laravel Queue Job gives error Model not found

I have created the job file and I'm dispatching the mail through the controller using mailable it will create the entry in job table but after the few seconds it will transfer the record into the failed_jobs table and gives error model not found

Controller Dispatch method

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);
        }        
    }
}

Mailable Class

<?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);
    }
}

The error I found in DB failed_jobs table

Illuminate\Database\Eloquent\ModelNotFoundException: No query results for model [App\Model\V1\User]. in /var/www/html/smartcgd/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php:416 Stack trace:

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

Illuminate\Database\Eloquent\Builder->firstOrFail()

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

App\Jobs\SendNotificationEmailJob->getRestoredPropertyValue(Object(Illuminate\Contracts\Database\ModelIdentifier))

2 [internal function]: App\Jobs\SendNotificationEmailJob->__wakeup()

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

unserialize('O:33:"App\Jobs\...')

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

Illuminate\Queue\CallQueuedHandler->call(Object(Illuminate\Queue\Jobs\DatabaseJob), Array)

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

Illuminate\Queue\Jobs\Job->fire()

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

Illuminate\Queue\Worker->process('database', Object(Illuminate\Queue\Jobs\DatabaseJob), Object(Illuminate\Queue\WorkerOptions))

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

Illuminate\Queue\Worker->runJob(Object(Illuminate\Queue\Jobs\DatabaseJob), 'database', Object(Illuminate\Queue\WorkerOptions))

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

Illuminate\Queue\Worker->daemon('database', 'default', Object(Illuminate\Queue\WorkerOptions))

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

Illuminate\Queue\Console\WorkCommand->runWorker('database', 'default')

10 [internal function]: Illuminate\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):

Illuminate\Container\BoundMethod::Illuminate\Container{closure}()

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

Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))

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

Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)

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

Illuminate\Container\Container->call(Array)

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

Illuminate\Console\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\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), Object(Illuminate\Console\OutputStyle))

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

Illuminate\Console\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))

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

Symfony\Component\Console\Application->doRunCommand(Object(Illuminate\Queue\Console\WorkCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))

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

Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(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), Object(Symfony\Component\Console\Output\ConsoleOutput))

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

Illuminate\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))

23 /var/www/html/smartcgd/artisan(37): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput),

Object(Symfony\Component\Console\Output\ConsoleOutput))

24 {main}



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire