У меня есть планировщик заданий, данные которого поступают из таблицы, у него есть частота времени, когда его следует запускать, и другие данные, используемые для выполнения задачи.
Теперь частота времени сохраняется как день, неделя, месяц, что соответствует 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 [];
}
И я запускаю цикл for внутри метода schedule
, чтобы сгенерировать планировщик задач следующим образом.
$allReportScheduler = self::reportScheduler();
foreach ($allReportScheduler as $reportScheduler) {
$schedule->call(function () use ($reportScheduler){
\Log::info('================ tableID->'.$reportScheduler['id']);
})->{$reportScheduler['schedule_type']()};
}
Ошибка здесь ->{$reportScheduler['schedule_type']()};
не может вызывать строку как функцию.
Вызов неопределенной функции EveryMinute()
Разве мы не можем сделать что-то подобное?