【问题标题】:Laravel - Modify DB::connection methodLaravel - 修改 DB::connection 方法
【发布时间】:2018-03-23 13:15:43
【问题描述】:

我想修改 DB::connection,所以如果我正在运行测试,它将覆盖给定的连接。

我在 DB::connection('mysql2') 这样的模型中有很多硬编码连接,所以我想用 mysql_testing 覆盖 mysql2 连接。

我该怎么办?

【问题讨论】:

  • 不要这样做。 phpunit.xml 文件允许您在运行测试时覆盖任何 .env 值,通过 <env name="APP_ENV" value="testing"/> 之类的东西。覆盖 DB_CONNECTION 环境变量并使用它。

标签: database laravel laravel-5 phpunit laravel-5.3


【解决方案1】:

我通常做的是添加phpunit.xml:

<env name="DB_CONNECTION" value="mysql_testing"/>

然后在config/database.php 中创建mysql 连接的副本,如下所示:

'mysql_testing' => [
    'driver' => 'mysql',
    'host' => env('DB_TESTING_HOST', 'localhost'),
    'database' => env('DB_TESTING_DATABASE', 'forge'),
    'username' => env('DB_TESTING_USERNAME', 'forge'),
    'password' => env('DB_TESTING_PASSWORD', ''),
    'charset' => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix' => '',
    'strict' => false,
],

然后在.env 中定义测试连接设置:

#TESTING

DB_TESTING_HOST=127.0.0.1
DB_TESTING_DATABASE=test_database
DB_TESTING_USERNAME=root
DB_TESTING_PASSWORD=pass

如果您在同一台机器上/在同一目录中手动运行测试和测试应用程序,则无需在 .env 中切换任何内容

编辑

如果你有这样的情况,可能修改多个模型不是最好的方法,但如果你想使用同一个数据库而不考虑连接设置,你可以这样做:

假设您已设置环境来测试可以使用的功能:

<env name="APP_ENV" value="testing"/>

在您的phpunit.xml 文件中,您可以进入您的AppServiceProvider 类并在register 方法中执行以下操作:

if ($this->app->environment('testing')) {
    $this->app['config']->set('database.connections.mysql2.database', 'yourcustom testing database');
    // ... 
    $this->app['config']->set('database.connections.mysql15.database', 'yourcustom testing database');
}

我还没有尝试过,但它应该可以工作 - 它应该使您在运行测试时可以将所有连接设置到同一个测试数据库(或其他数据库,如果您愿意)

【讨论】:

  • 问题是我在这样的模型中有很多硬编码的连接 DB::connection('mysql2') 所以我想用 mysql_testing 覆盖 mysql2 连接,这不起作用只需将其设置在 phpunit.xml
  • 那不是在调用 DB::connection('mysql2') 之前设置连接吗?
  • 什么意思?当您使用它时,它应该连接到您在服务提供商中设置的数据库。因此,如果在您的模型中使用此连接 mysql2,并且在服务提供商中将其设置为不同的数据库,则应使用此不同的数据库
  • 我现在明白了,我认为这会奏效。需要测试一下。
  • @Jack 我会通过拥有DB2_CONNECTION .env 值来处理mysql2。使其可配置,这样您就可以覆盖该配置以进行测试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-11
相关资源
最近更新 更多