Динамический планировщик задач — Laravel

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

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

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


person Rehan    schedule 30.10.2019    source источник


Ответы (1)


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

->{$reportScheduler['schedule_type']}();
person Ahil Murugesan    schedule 30.10.2019