我正在用Laravel 5(.1)创建一个应用程序,在那里它需要连接到不同的数据库。唯一的问题是不知道必须连接到哪些数据库,因此无法在配置中使用database.php。控制器负责使用动态给定的连接细节进行连接。
如何建立到数据库的新连接,包括使用DB类?(或者这有可能)
提前感谢!
发布于 2016-03-18 13:08:49
最简单的解决方案是在运行时设置数据库配置。Laravel可能期望从config/database.php文件中加载这些设置,但这并不意味着您以后不能设置或更改它们。
从config/database.php加载的配置以database形式存储在Laravel中。这意味着,connections数组在config/database.php中存储在database.connections。
因此,您可以轻松地覆盖/更改这些连接,如下所示:
Config::set("database.connections.mysql", [
"host" => "...",
"database" => "...",
"username" => "...",
"password" => "..."
]);从此以后,任何使用此mysql连接的优秀模型都将使用这个新的数据库连接配置。
如果可能的话,我建议在服务提供商中这样做。
发布于 2016-03-18 13:26:32
我偶然发现了同样的问题。
您实际上可以在运行时更改数据库设置并使用它们。
使用config()函数设置额外的或覆盖现有的连接设置。
config(['database.connections.mynewconnection' => {settings here}]);请记住,这些设置是缓存的。因此,当您需要使用新设置时,清除要使用的连接的DB缓存。
DB::purge('mynewconnection');还可以操作所使用的默认连接。如果您希望在不同的连接上使用迁移,并在使用的连接中使用迁移表来跟踪它们,这可能会派上用场。或者其他很酷的东西..。
DB::setDefaultConnection('mynewconnection');发布于 2020-09-01 06:32:55
您可能需要使用以下这些:
use Illuminate\Support\Facades\Config;
use DB;设置数据库配置:
Config::set("database.connections.mysql_external", [
'driver' => 'mysql',
"host" => "localhost",
"database" => "db_name",
"username" => "root",
"password" => "root",
"port" => '8889',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
]);连接到数据库并做一些事情:
$users = DB::connection('mysql_external')->select('Select id from users');断开数据库和重置配置变量
DB::disconnect('mysql_external');
Config::set("database.connections.mysql_external", [
'driver' => 'mysql',
"host" => "localhost",
"database" => "",
"username" => "",
"password" => "",
"port" => '',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
]);https://stackoverflow.com/questions/36085131
复制相似问题