首页 文章

Laravel Scheduling 呼叫控制器

提问于
浏览
11

我使用 Laravel 任务调度,但是当我从控制器调用某个方法时遇到问题。

protected function schedule(Schedule $schedule)
{
    $schedule->call('UserController@deleteInactiveUsers')->everyMinute();
    //$schedule->call('App\Http\Controllers\UserController@deleteInactiveUsers')->everyMinute();
}

当我使用未注释的行调用时,我收到此错误:

[ReflectionException]
Class RecurrenceInvoiceController does not exist

然后我插入完全限定的命名空间路径,然后我收到此错误:

[PDOException] SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known

[ErrorException] PDO::__construct(): php_network_getaddresses: getaddrinfo failed: Name or service not known

问题出在哪儿?从 Laravel 任务调度中调用 Controller 的方法是正确的。

4 回答

  • 0

    好。我解决了这个问题。问题出在 Docker Cron 容器上。 Cron 容器没有与 MySQL 容器链接。谢谢你的所有答案。

  • 18

    我几个月前偶然发现同样的问题,直到我能解决它。我使用 laravel 5.2 并且内核以这种方式调用我的驱动程序:

    $schedule->call('App\Http\Controllers\MyController@MyAction')->everyMinute();
    

    我希望这能帮助别人;)

  • 1

    对我来说,第一个错误看起来像你需要运行composer update,然后composer dump-autoload

    如果它工作,你也会得到第二个错误,2002 年的错误意思是:

    无法通过套接字连接到本地 MySQL 服务器“(请参阅(MySQL 文档中的客户端错误代码和消息)。

    您需要在.env文件中设置数据库配置

  • 0

    现在我用更简单的功能测试在数据库中插入新货币。这是代码:

    public function handle()
        {
            $currency                = new Currency();
            $currency->currency_name = 'EUR';
            $currency->save();
    
            $this->info('New currency is successfully generated!');
        }
    

    此功能来自laravel/app/Console/Commands。我打电话给Kernel > schedule()。不行。

    当我插入简单的日志写入handle()函数时:

    File::put(base_path() . '/storage/logs/test_logs.txt', 'Test log ' . Carbon::now()->format('Y-m-d H:i:s') . PHP_EOL);
    

    这很有效。但是当我尝试从Models创建新对象并保存到 db - >这不起作用。

相关问题