laravel - 动态切换数据库连接

标签 laravel eloquent codeception

对于几个控制台命令,我需要更改数据库,以便所有有效的命令和查询都在正确的数据库(和服务器)上运行。

香港专业教育学院见过一些解决方案,最简单的似乎是这样更改配置:

$new_connection = [
        'driver'    => 'mysql',
        'host'      => '127.0.0.1',
        'database'  => 'test_db',
        'username'  => 'test',
        'password'  => 'test',
        'charset'   => 'utf8',
        'collation' => 'utf8_general_ci',
        'prefix'    => '',
        'strict'    => false
];

config(['database.connections.mysql' => $new_connection]);
DB::purge('mysql');


唯一的问题(我注意到)是当我尝试进行交易时,更具体地说,当我在Codeception的验收测试中进行交易时-它们根本无法工作。

我使用的命令是:

DB::connection()->beginTransaction(); // inside the _before function




DB::connection()->rollBack(); // inside the _after function

最佳答案

您必须创建2个不同的连接

http://fideloper.com/laravel-multiple-database-connections
https://laravel.com/docs/5.1/database#accessing-connections

return array(
    'default' => 'mysql',

    'connections' => array(

        # Our primary database connection
        'mysql' => array(
          'driver'    => 'mysql',
          'host'      => '127.0.0.1',
          'database'  => 'test_db',
          'username'  => 'test',
          'password'  => 'test',
          'charset'   => 'utf8',
          'collation' => 'utf8_general_ci',
          'prefix'    => '',
          'strict'    => false
        ),

        # Our secondary database connection
        'mysql2' => array(
          'driver'    => 'mysql',
          'host'      => '127.0.0.1',
          'database'  => 'test_db_2',
          'username'  => 'test',
          'password'  => 'test',
          'charset'   => 'utf8',
          'collation' => 'utf8_general_ci',
          'prefix'    => '',
          'strict'    => false
        ),
    ),
);


现在,当您要查询时,您必须通过所需的连接

$users = DB::connection('mysql2')->select(...);


由于默认的声明为mysql,因此可以省略。

关于laravel - 动态切换数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38886491/

相关文章:

php - Laravel 使用 AJAX 附加 View

php - 如何检查是否在 laravel Eloquent 中插入了一行表?

php - laravel 在创建父模型后使用 with() vs load() 进行预加载

rest - Codeception - 如何检查响应与 xpath 不匹配

php - 未知方法 ApiTester::sendGet 与 Codeception

php - 如何使用 laravel 5.1 从数据库中只选择 2 列?

php - 使用 Laravel 对重复电子邮件进行 Jquery 验证

laravel - Laravel 应用程序的部署会破坏应用程序,直到手动运行 composer install

Laravel Eloquent 地在访问器中使用范围

Symfony 4 模拟私有(private)服务