У меня есть планировщик задач, данные которого поступают из таблицы, он имеет частоту времени, когда он должен быть запущен, и другие данные, используемые для выполнения задачи.
Теперь, частота времени сохраняется как день, неделю, месяц, что равняется 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 ()
Разве мы не можем сделать что-то подобное?