每个数据库实际上是一个单独的连接,所以我会在config/database.php文件中设置与数据库的所有连接,然后您可以使用模型上的setConnection()方法在它们之间切换。
数据库.php:
return [
'default' => 'mysql-key1',
'connections' => [
'mysql-key1' => [
'driver' => 'mysql',
'database' => 'key1_dbname,
// etc
],
'mysql-key2' => [
'driver' => 'mysql',
'database' => 'key2_dbname',
// etc
]
]
];
ProductRepository.php:
public function setConnection($name) {
// assumes $this->product is your Product model
$this->product->setConnection($name);
}
代码:
$productRepo = new ProductRepository();
foreach ($array as $key => $value) {
$productRepo->setConnection($key . '_' . $database);
$products = $productRepo->all();
}
编辑
基于 cmets 的附加信息
Laravel 只会在第一次需要时实例化与数据库的连接。创建连接后,它将重用它。如果您必须为每个查询重新连接到数据库,这将是一个巨大的性能问题。
话虽如此,如果您真的想按照最初设计的方式进行操作,您只需在更新配置后调用DB::reconnect() 方法即可。
foreach ($array as $key => $value) {
Config::set('database.connections.mysql.database', $key . '_' . $database);
DB::reconnect();
$productRepo = new ProductRepository();
$products = $productRepo->all();
}
但是,我强烈建议您考虑最初描述的选项,以免您进行大量不必要的连接。