【问题标题】:How I can delay a piece of code to be executed without breaking the execution flow in laravel?如何在不破坏 laravel 执行流程的情况下延迟一段代码的执行?
【发布时间】:2020-11-18 19:40:47
【问题描述】:

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

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


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

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

【问题讨论】:

    标签: php laravel-5.7


    【解决方案1】:

    您可以为此使用 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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 2013-10-02
    • 2016-09-06
    • 2016-12-11
    • 1970-01-01
    相关资源
    最近更新 更多