在多个数据库上运行Laravel计划任务的最佳方法是什么?

时间:2019-02-04 02:00:01

标签: php laravel scheduled-tasks

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

1 个答案:

答案 0 :(得分:2)

使用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,这将需要一个三元运算符或一个条件。但这就是我的方法。我的并不完全一样,我从数据库中获取值,因为每隔几分钟更新一次配置文件不好,并且在配置文件中没有关于数百台服务器的信息也不是一件好事。但这对您有用(将此代码视为逻辑,而不是无需修改即可针对您的特定情况开箱即用的魔术)