Планировщик динамических задач - Laravel - PullRequest
2 голосов
/ 30 октября 2019

У меня есть планировщик задач, данные которого поступают из таблицы, он имеет частоту времени, когда он должен быть запущен, и другие данные, используемые для выполнения задачи.

Теперь, частота времени сохраняется как день, неделю, месяц, что равняется 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 ()

Разве мы не можем сделать что-то подобное?

1 Ответ

1 голос
/ 30 октября 2019

Попробуйте следующий код: скобки в скобках следует размещать вне фигурных скобок

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