动态任务调度程序 - Laravel

Dynamic Task scheduler - Laravel

我有一个 Task Scheduler,其数据来自 table,它具有应该是 运行 的时间频率和用于执行任务的其他数据。

现在,时间频率存储为日、周、月,相当于 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']()}; 无法将字符串作为函数调用。

Call to undefined function everyMinute()

我们能不能不要那样做?

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

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