laravel更改数据库连接运行时

时间:2015-06-25 05:28:45

标签: php laravel-5

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

你对此有什么想法吗?

请与我分享。

感谢。

4 个答案:

答案 0 :(得分:12)

更新:这个答案是从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);

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

答案 1 :(得分:12)

您可以使用

在运行时更改连接详细信息
Config::set('database.connections.mysql.database', 'other_database');

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

DB::purge('mysql');

答案 2 :(得分:1)

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

config(['database.default' => 'databasename']);

必须在databasename数组的config/database中指定connections的地方。

答案 3 :(得分:0)

我们有一个类似的场景,在哪里寻找历史数据,我们改变了数据库。我们在模型中使用以下内容:

def permutationEquation(p):
    result = []
    for i in range(1, len(p)+1):
        for y, v in enumerate(p):
            if p[v-1] != i:
                break
            result.append(y + 1)

然后,在代码上,我们将$ db作为参数发送:

public function inventory($db, $id) {
  return DB::table($db . '.inventory')->where('inventoryid', $id)->get();
}

这样,您不需要为每个不同的数据库定义连接,也不需要修改数据库配置文件。

唯一的缺点是您无法直接使用该模型,而是必须使用数据库帮助程序。