Я создал файл задания и отправляю почту через контроллер с использованием 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}