我有一个laravel网络应用,其中每个客户端都有自己的数据库。所有数据库连接都在config / database.php中定义为连接。我根据请求来自的子域连接到适当的数据库。 现在,我需要在每个午夜运行一些清洁任务。我创建了一个命令来完成任务,它适用于laravel应用当前配置为.env文件的默认数据库。但是,为所有客户端数据库迭代此任务的最佳方法是什么?
答案 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
,这将需要一个三元运算符或一个条件。但这就是我的方法。我的并不完全一样,我从数据库中获取值,因为每隔几分钟更新一次配置文件不好,并且在配置文件中没有关于数百台服务器的信息也不是一件好事。但这对您有用(将此代码视为逻辑,而不是无需修改即可针对您的特定情况开箱即用的魔术)