laravel 更改数据库连接运行时间

2022-08-30 17:33:10

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

你对此有任何想法吗?

请与我分享。

谢谢。


答案 1

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

Config::set('database.connections.mysql.database', 'other_database');

但不要忘记运行之前,以便删除缓存purge

DB::purge('mysql');

答案 2

更新:这个答案来自2015年!我已经很多年没有使用Laravel了,而且我没有掌握最新的最佳实践。这个答案不断被投票,所以我想它有效,但请谨慎行事。


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

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

$data = DB::connection('another_connection')->select(...);

您可以在文件中指定该变量。喜欢这个: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',
    ),
),
);

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

$user = new User;
$user->setConnection('another_connection');
$user1 = $user->find(1);

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


推荐