【问题标题】:What is the best way to run a Laravel Scheduled Task over multiple databases?在多个数据库上运行 Laravel 计划任务的最佳方法是什么?
【发布时间】:2019-06-27 19:01:18
【问题描述】:

我有一个 laravel 网络应用程序,其中每个客户端都有自己的数据库。所有数据库连接都定义为 config/database.php 中的连接。我根据请求来自的子域连接到适当的数据库。 现在,我需要在每个午夜运行一些清洁任务。我创建了一个命令来完成该任务,它适用于 laravel 应用程序当前在 .env 文件中配置的默认数据库。但是,为所有客户端数据库迭代此任务的最佳方法是什么?

【问题讨论】:

    标签: php laravel scheduled-tasks


    【解决方案1】:

    使用 Laravel 的 Config 类很容易实现。我在连接多个 MySQL 服务器和多个数据库以从服务器获取一些信息时遇到了同样的问题。而且我必须处理未定义数量的服务器。所以我找到了一个对你也有用的通用解决方案!

    为您的命令的 Handle() 函数考虑这种结构:

    public function handle()
    {
        $arrayOfConnections = config('database.connections'); // Array of connections
    
        foreach($arrayOfConnections as $connection){
            // Setting Config
            Config::set('database.connections.dynamicConnection.host',$connection->host);
            Config::set('database.connections.dynamicConnection.password',$connection->connection);
            // More of your config
    
            // Your Logic Here
    
            // Purge the configuration (It is important!)
            DB::purge('dynamicConnection'); 
    
    
        }
    }
    

    当然,您必须从数组中排除dynamicConnection,这需要一个三元运算符或一个条件。但这就是我的做法。我的不完全一样,我从数据库中获取值,因为每隔几分钟更新一次配置文件不好,而且在配置文件中包含数百台服务器的信息也不好。但这对您有用(将此代码视为逻辑,而不是魔术,无需编辑即可针对您的特定情况开箱即用)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-24
      • 2015-10-01
      • 2010-10-07
      • 2021-10-13
      • 1970-01-01
      相关资源
      最近更新 更多