【发布时间】: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()
我们不能这样做吗?
【问题讨论】: