您好我創建了一個發送郵件的作業。我使用 withCount() 在控制器中執行查詢,并且能夠在控制器內部獲取 count 引數,但是當我將相同的資料決議給作業并分配給建構式中的區域變數時,我在句柄中使用區域變數我的本地缺少方法計數引數。
我使用 SYNC 作為 QUEUE_DRIVER 和下面提到的代碼檔案
控制器
$confernceIterationData = ConferenceIteration::with('AbstractNews')->withCount('AbstractNews')->where('id', $unserializeData['confid'])->first();
$this->dispatch(new SendtronAutomatedEmailJob($confernceIterationData, $unserializeData, $attachments));
dd($confereceIterationData) 的控制器輸出
array:42 [
"id" => 9085
"conference_iteration_id" => "e3f65fda-7776-4e64-82d8-b5f1289141e2"
"conference_id" => 259
"name" => "American Association of Cancer Research Annual Meeting 2022"
"acronym" => "AACR 2022"
"abstract_news_count" => 8339
]
作業
<?php
namespace App\Jobs;
use App\Mail\SendTronAutomatedMail;
use App\TeamConferences;
use App\User;
use Carbon\Carbon;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Storage;
class SendtronAutomatedEmailJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* conference Iteration data
*
* @var object
*/
protected $confrenceData;
/**
* Planner Form Data
*
* @var array
*/
private $formData;
/**
* attchement files
*
* @var array
*/
private $files;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($confrenceData, $formData, $files)
{
$this->confrenceData = $confrenceData;
$this->confrenceData->abcount = $confrenceData->abstract_news_count;
$this->formData = $formData;
$this->files = $files;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
dd($this->confrenceData);
$request = $this->formData;
$i = 0;
$users = User::select('email')->distinct()->wherehas('teams', function ($q) use ($request) {
$q->whereIn('id', $request['teams']);
})->pluck('email')->toarray();
$subject = $this->confrenceData->acronym . " Conference Planner (" . $this->confrenceData->data_status . ")";
$this->extractConfenceData($this->confrenceData);
// dd($this->confrenceData->AbstractNews_count);
$count = count($users);
foreach ($users as $user) {
Log::channel('sendtron_email')->info('Authomated Mail Send To .', ['id' => $user]);
Mail::to($user)->send(new SendTronAutomatedMail($request['content'], $subject, $this->files));
if ( $i === $count) {
unset($users);
TeamConferences::where('conference_iteration_id', $request['confid'])->whereIn('team_id', $request['teams'])->update(['last_mail_sent' => Carbon::now()->toDateTimeString()]);
Storage::disk('s3SendTron')->delete(array_column($this->files, 's3path'));
}
}
}
}
如果我們在建構式中使用 dd($confrenceData),我們會在控制器輸出中得到屬性abstract_news_count 。
但同時如果我們 dd($this->confrenceData) 我們無法獲得abstract_news_count
uj5u.com熱心網友回復:
如果您使用supervisor,您嘗試重新啟動supervisor 如果您使用cli,您應該關閉并運行 php artisan queue:work 或將引數放入一個陣列。
uj5u.com熱心網友回復:
我將另一個變數宣告為類并在作業中的建構式中設定值。所以代碼看起來像
public function __construct($confrenceData, $formData, $files)
{
$this->confrenceData = $confrenceData;
$this->confrenceData->abcount = $confrenceData->abstract_news_count;
$this->formData = $formData;
$this->files = $files;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/504956.html
