laravel更改数据库连接运行时

Arj*_*ale 13 php laravel-5

我需要在运行时更改laravel 5数据库连接.

你有什么想法吗?

请与我分享.

谢谢.

FBi*_*idu 15

更新:这个答案是从2015年开始的!我多年没有使用过Laravel,而且我还没有及时了解最新的最佳实践.这个答案不断上升,所以我认为它有效,但请谨慎行事.


好吧,我对此的直接回答是:不要.您可以通过更改数据模型并使用更高级的关系来完成任务.在不知道你想做什么的情况下很难分辨,但在我看来,这似乎是一个坏主意,特别是如果你打算使用雄辩的模型等等

也就是说,在某些情况下,您确实需要更改另一个数据库中的数据或执行一些原始查询,您可以使用该DB::connection()方法.就像是:

$data = DB::connection('another_connection')->select(...);
Run Code Online (Sandbox Code Playgroud)

您可以another_connectiondatabase.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',
    ),
),
);
Run Code Online (Sandbox Code Playgroud)

您甚至可以为每个雄辩模型指定连接,protected $connection = 'another_connection';也可以为运行时创建/查询的每个模型实例指定连接

$user = new User;
$user->setConnection('another_connection');
$user1 = $user->find(1);
Run Code Online (Sandbox Code Playgroud)

但话说回来,我个人认为这不是一个好主意,而且在我看来,随着应用程序的复杂性增加,一切都会变得混乱并迅速崩溃.


NiR*_*iRR 15

您可以在运行时使用更改连接详细信息

Config::set('database.connections.mysql.database', 'other_database');
Run Code Online (Sandbox Code Playgroud)

但是在删除缓存之前不要忘记清除

DB::purge('mysql');
Run Code Online (Sandbox Code Playgroud)

  • 我浪费了十个小时试图在运行时更改默认数据库。我忘记的是 DB::purge() 方法。谢谢! (2认同)
  • 真的很感谢你的帮助。DB::purge('mysql') 是关键! (2认同)

Ada*_*dam 5

从 Laravel 5.x 或 6.x 开始,您可以像这样更改它

config(['database.default' => 'databasename']);
Run Code Online (Sandbox Code Playgroud)

databasename在中指定config/database的在connections数组中。