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

问题描述 投票:0回答:1

我有一个laravel web应用程序,每个客户都有自己的数据库。所有的数据库连接被定义为在配置/ database.php中的连接。我根据请求来自子域连接到相应的数据库。现在有我需要的每个午夜运行一些清洁工作。我创建了一个命令来实现任务和它的作品为laravel应用程序当前被配置为在.ENV文件的默认数据库。 Hoewever,什么是重复此任务的所有客户端数据库的最佳方式?

php laravel scheduled-tasks
1个回答
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。但是,这是我做到了。我的是不完全一样的,我得到的值从数据库中,因为它不是好更新配置文件每隔几分钟,这不是好事,有大约数百台服务器的配置文件信息。但是,这会为你工作(这一代码的逻辑,不是魔术,将工作开箱您的具体情况没有编辑)

© www.soinside.com 2019 - 2024. All rights reserved.