5

我有两个数据库连接。一个用于我的应用程序,另一个用于测试。在我的..\config\database.php

         'mysql' => [
            'driver'    => 'mysql',
            'host'      => env('DB_HOST', 'localhost'),
            'database'  => env('DB_DATABASE', 'forge'),
            'username'  => env('DB_USERNAME', 'forge'),
            'password'  => env('DB_PASSWORD', ''),
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
            'strict'    => false,
        ],

        'testing' => [
            'driver'    => 'mysql',
            'host'      => env('DB_TEST_HOST', 'localhost'),
            'database'  => env('DB_TEST_DATABASE', 'forge'),
            'username'  => env('DB_TEST_USERNAME', 'forge'),
            'password'  => env('DB_TEST_PASSWORD', ''),
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
            'strict'    => false,
        ],

我可以使用播种更改数据库连接

php artisan db:seed --database=testing

我想使用修补程序进行连接“测试”,但无法更改它。有没有办法改变与数据库播种类似的修补程序的数据库连接?

4

3 回答 3

13

由于您的问题从使用一个用于测试/开发和一个用于生产的数据库开始,您应该考虑使用不同的环境,这将允许您在部署和本地测试之间没有更改代码。


通过指定您的环境可以轻松完成此任务:

php artisan tinker --env=local

默认情况下,如果您指定 no --env,您将使用/your-app/.env

使用local时从/your-app/.env.local


对于您的特定用例:

php artisan db:seed --env=local

进一步阅读:https ://laravel.com/docs/5.6/configuration

注意:您应该避免将“.env”文件签入 VCS,.env.local 应该可以共享,但最好不要将生产凭据与您的 VCS 捆绑在一起。

于 2018-04-04T14:04:11.820 回答
4

要从 tinker 中将默认数据库连接设置为“mysql_test”,使用以下命令:

>>> use DB
>>> DB::setDefaultConnection('mysql_test');

当你想测试你的迁移和播种器而不弄乱你现有的(工作的)本地数据库时,它特别有用。

于 2019-07-31T15:56:34.183 回答
0

更改默认连接

$model_instance = new App\YourModel();
$model_instance->setConnection('new_connection');
$data = $model_instance->find(1);
于 2018-04-04T11:40:44.730 回答