动态任务调度程序 - 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']}();
我有一个 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']}();