【问题标题】:Dynamic Task scheduler - Laravel动态任务调度器 - Laravel
【发布时间】:2020-02-25 18:48:43
【问题描述】:

我有一个任务计划程序,它的数据来自一个表,它有时间频率,它应该在什么时候运行,以及用于执行任务的其他数据。

现在,时间频率存储为日、周、月,相当于daily(), weekly(), monthly() 所以我做这样的事情来修改数据并将其存储为字符串。

public function reportScheduler () {

    $allActiveScheduler = QaMetricsSchedule::selectRaw(
        ......
        'schedule_type as `schedule_type`,'.
        'schedule_time as `schedule_time`')
        ->where('status','=',1)
        ->get();

    if(count($allActiveScheduler) > 0){
        $allActiveScheduler = $allActiveScheduler->toArray();

        foreach ($allActiveScheduler as &$scheduler){

            $scheduler['schedule_type'] = 'everyMinute';
            if($scheduler->schedule_type === 'week'){
                $scheduler->schedule_type = "weeklyOn(1, '".$scheduler->schedule_time.":00')";
            }
            if($scheduler->schedule_type === 'month'){
                $scheduler->schedule_type = "monthlyOn(1, '".$scheduler->schedule_time.":00')";
            }
            if($scheduler->schedule_type === 'day'){
                $scheduler->schedule_type = "dailyAt('".$scheduler->schedule_time.":00')";
            }

        }
        return $allActiveScheduler;
    }
    return [];
}

我在 schedule 方法中运行一个 for 循环来生成这样的任务调度程序

$allReportScheduler = self::reportScheduler();

foreach ($allReportScheduler as $reportScheduler) {
    $schedule->call(function () use ($reportScheduler){
        \Log::info('================ tableID->'.$reportScheduler['id']);
    })->{$reportScheduler['schedule_type']()};
}

错误在这里->{$reportScheduler['schedule_type']()}; 无法将字符串作为函数调用。

调用未定义函数 everyMinute()

我们不能这样做吗?

【问题讨论】:

    标签: php laravel laravel-6


    【解决方案1】:

    试试下面的代码: 大括号应该放在大括号外面

    ->{$reportScheduler['schedule_type']}();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-22
      • 1970-01-01
      • 2016-04-28
      • 2013-02-25
      • 2016-12-12
      • 1970-01-01
      • 1970-01-01
      • 2020-11-06
      相关资源
      最近更新 更多