Как я могу отложить выполнение фрагмента кода, не нарушая поток выполнения в laravel?

#php #laravel-5.7

#php #laravel-5.7

Вопрос:

В контроллере laravel у меня есть фрагмент кода, который мне нужно выполнить через 48 часов после создания записи в моей базе данных.

Например, когда я запускаю следующий код:

 
$model = new Model();
$model->value = true
$model->save();
  

Либо в консоли, либо в контроллере 48 часов спустя для выполнения другого задания, которое дополнительно обрабатывает созданную запись. Использование cron не вариант, потому что в моем случае это приводит к ненужной загрузке моей базы данных.

Ответ №1:

Для этого вы можете использовать очереди laravel, просто отложив отправку задания на 24 часа

вы начинаете с создания задания, затем в вашем контроллере вы делаете это, например:

 <?php

namespace AppHttpControllers;

use AppHttpControllersController;
use AppJobsProcessModel;
use IlluminateHttpRequest;

class ModelController extends Controller
{

    public function store(Request $request)
    {
        $model = new Model();
        $model->value = true
        $model->save();

        ProcessModal::dispatch($model)
                ->delay(now()->addHours(24));
    }
}
  

ссылка: https://laravel.com/docs/8.x/queues#delayed-dispatching

Комментарии:

1. Вы указываете на документацию для laravel 8, а не для laravel 5.7

2. @DimitriosDesyllas, мой плохой, но в laravel 5.7 то же самое laravel.com/docs/5.7/queues#delayed-dispatching