Есть ли преимущество при отправке задания в планировщике Laravel? - PullRequest
0 голосов
/ 25 сентября 2019

В моем приложении я хочу сообщить администратору, что у пользователя есть меньше месяца, чтобы переопределить его тип.По сути, это должно происходить каждые 12 месяцев, поэтому я сделал Mailable, который принимает пользователя.

<?php

namespace App\Mail\Admin;

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

class DeclarationDueToExpire extends Mailable
{
    use Queueable, SerializesModels;

    /**
     * The user instance passed to this Mailable
     *
     * @var User
     */
    public $user;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct(User $user)
    {
        $this->user = $user;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this
            ->to("npiinvestors@newable.co.uk")
            ->subject('Declaration due to expire for investor ' . $this->user->full_name)
            ->markdown('emails.admin.declaration-due-to-expire');
    }
}

Теперь обычно я просто делаю это как консольную команду и добавляю ее в планировщик:

public function handle()
{
    User::whereDate('declaration_date', Carbon::today()->subMonths(11))->get()
        ->each(function ($user) {
            Mail::send(new DeclarationDueToExpire($user));
        });
}

Недавно я столкнулся с Jobs, поэтому я написал тест, используя Job.

<?php

namespace Tests\Feature;

use App\Jobs\SendDeclarationDueToExpireEmail;
use App\Mail\Admin\DeclarationDueToExpire;
use App\User;
use Carbon\Carbon;
use Tests\TestCase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Mail;

class DeclarationSoonToExpireTest extends TestCase
{
    use RefreshDatabase;

    /** @test */
    public function a_notification_is_sent_exactly_eleven_months_after_initial_declaration()
    {
        Mail::fake();

        $dueToExpire = factory(User::class)->create([
            'declaration_date' => Carbon::today()->subMonths(11)
        ]);

        dispatch(new SendDeclarationDueToExpireEmail);

        Mail::assertSent(DeclarationDueToExpire::class);
    }
}

Поскольку мне все равно приходилось бы ежедневно отправлять задание из планировщика,есть ли польза от использования задания в сценарии?

В дополнение к этому, вы могли бы выполнять работу для всех потенциально долго выполняемых задач?

Наконец, как вы, ребята, различаете Mailablesи Notifications когда уведомление можно отправить по почте?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...