Laravel - 修改DB::connection方法
Laravel - Modify DB::connection method
我想修改 DB::connection 所以如果我正在 运行 测试它将覆盖给定的连接。
我在这样的模型中有很多硬编码连接 DB::connection('mysql2') 所以我想用 mysql_testing 覆盖 mysql2 连接。
我该怎么做?
我通常做的是在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
中切换任何东西,如果你是 运行 在同一个 machine/in 同一个目录[=23] 上手动测试和测试应用程序=]
编辑
如果你遇到这样的情况,修改多个模型可能不是最好的方法,但如果你想使用相同的数据库而不考虑连接集,你可以这样做:
假设您已将环境设置为测试可以使用以下功能完成的操作:
<env name="APP_ENV" value="testing"/>
在您的 phpunit.xml
文件中,您可以进入 AppServiceProvider
class 并在 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 所以如果我正在 运行 测试它将覆盖给定的连接。
我在这样的模型中有很多硬编码连接 DB::connection('mysql2') 所以我想用 mysql_testing 覆盖 mysql2 连接。
我该怎么做?
我通常做的是在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
中切换任何东西,如果你是 运行 在同一个 machine/in 同一个目录[=23] 上手动测试和测试应用程序=]
编辑
如果你遇到这样的情况,修改多个模型可能不是最好的方法,但如果你想使用相同的数据库而不考虑连接集,你可以这样做:
假设您已将环境设置为测试可以使用以下功能完成的操作:
<env name="APP_ENV" value="testing"/>
在您的 phpunit.xml
文件中,您可以进入 AppServiceProvider
class 并在 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');
}
我还没有尝试过,但它应该可以工作 - 它应该可以让 运行 测试时你可以将所有连接设置到同一个测试数据库(如果你愿意,也可以设置到其他数据库)