动态任务调度程序-Laravel



我有一个任务调度器,它的数据来自一个表,它有应该运行的时间-频率,以及用于执行任务的其他数据。

现在,时间-频率存储为天、周、月,相当于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((

我们可以不做那样的事情吗?

尝试以下代码:括号应该放在大括号之外

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

最新更新