这是我第一次使用laravel队列作业,但不知何故,我无法使其工作。
这是我的邮件类:
class TopluKabulMektubu extends Mailable
{
use Queueable, SerializesModels;
public $letter;
public function __construct(AcceptLetter $letter)
{
$this->letter = $letter;
}
public function build()
{
$letter = $this->letter;
return $this->subject('Mail Title')
->view('emails.topluKabulSon')
->attach(public_path($letter->pdf), [
'as' => 'AcceptanceLetter.pdf',
'mime' => 'application/pdf',
]);
}
}
我在AcceptanceLetter模型中创建了一个函数,可以更容易地使用邮件:
public function sendAcceptanceLetter(){
Mail::to('******@gmail.com')->queue(new TopluKabulMektubu($this));
if(Mail::failures()){
$this->email_send = 2;
$this->save();
}else{
$this->email_send = 1;
$this->save();
}
}
我用php artisan queue:table创建了一个队列表并进行了迁移,还从env文件更改了与数据库的队列连接。
我的工作文件:
class QueueJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $letter;
public function __construct($letter)
{
//
$this->letter = $letter;
}
public function handle()
{
$this->letter->sendAcceptanceLetter();
}
}
Web路由触发我的工作:Route::get('/topluDeneme', [PaginationController::class, 'topluQueue']);
控制器:
public function topluQueue(){
$letters = AcceptLetter::where('email', '!=', null)->where('passport_number','!=','0');
foreach($letters as $letter){
QueueJob::dispatch($letter);
}
}
我期望当我运行php-artisan队列时:在终端上侦听并转到/topluDeneme路由,发送邮件。但终端上什么都没有发生,邮件没有发送,作业数据表上也没有任何变化。
我发现我的代码有什么问题。我似乎忘记在控制器中使用get((,这是正确的版本:
public function topluQueue(){
$letters = AcceptLetter::where('email', '!=', null)->where('passport_number','!=','0')->get();
foreach($letters as $letter){
QueueJob::dispatch($letter);
}
}