laravel 更改数据库连接运行时间
我需要在运行时更改 laravel 5 数据库连接。
你对此有任何想法吗?
请与我分享。
谢谢。
我需要在运行时更改 laravel 5 数据库连接。
你对此有任何想法吗?
请与我分享。
谢谢。
您可以在运行时更改连接详细信息
Config::set('database.connections.mysql.database', 'other_database');
但不要忘记运行之前,以便删除缓存purge
DB::purge('mysql');
更新:这个答案来自2015年!我已经很多年没有使用Laravel了,而且我没有掌握最新的最佳实践。这个答案不断被投票,所以我想它有效,但请谨慎行事。
好吧,我对此的直接回答是:不要。您可以通过更改数据模型和使用一些更高级的关系来完成任务。在不知道自己想做什么的情况下很难分辨,但在我看来,总的来说,这是一个坏主意,特别是如果你打算使用雄辩的模型等等。
也就是说,在某些情况下,您确实需要更改另一个数据库中的数据或执行一些原始查询,您可以使用该方法。像这样:DB::connection()
$data = DB::connection('another_connection')->select(...);
您可以在文件中指定该变量。喜欢这个:another_connection
database.php
<?php
return array(
'default' => 'mysql',
'connections' => array(
# Your regular connection
'mysql' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'database',
'username' => 'user',
'password' => 'password'
'charset' => 'utf8',
),
# Your new connection
'another_connection' => array(
'driver' => 'mysql',
'host' => 'another_host',
'database' => 'another_db',
'username' => 'user1',
'password' => 'password1'
'charset' => 'utf8',
),
),
);
您甚至可以为每个雄辩的模型指定一个连接,也可以使用在运行时创建/查询的每个模型实例指定一个连接。protected $connection = 'another_connection';
$user = new User;
$user->setConnection('another_connection');
$user1 = $user->find(1);
但话又说回来,我个人并不认为这是一个好主意,在我看来,随着应用程序复杂性的增加,一切都会变得混乱并很快崩溃。