如何在不中断 laravel 中的执行流程的情况下延迟执行一段代码?

How I can delay a piece of code to be executed without breaking the execution flow in laravel?

在 laravel 控制器中,我有一段代码需要在 48 小时后在我的数据库中创建记录后执行。

例如,一旦我 运行 下面的代码:


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

48 小时后在控制台或控制器中执行另一个作业,进一步处理创建的记录。使用 cron 不是一个选项,因为在我的情况下它会导致我的数据库不必要的负载。

您可以为此使用 laravel 队列,只需将作业调度延迟 24 小时即可

您首先创建作业,然后在您的控制器中执行此操作,例如:

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\Jobs\ProcessModel;
use Illuminate\Http\Request;

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