如何指定 Tinker 使用不同的数据库连接?

How to I specify Tinker to use a different database connection?

我有两个数据库连接。一个用于我的应用程序,另一个用于测试。 在我的..\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

我想为连接使用 tinker 'testing' 但无法更改它。有什么方法可以更改类似于数据库播种的修补程序的数据库连接吗?

更改默认连接

$model_instance = new App\YourModel();
$model_instance->setConnection('new_connection');
$data = $model_instance->find(1);

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


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

php artisan tinker --env=local

By default, if you specify no --env, you will be using /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 捆绑在一起。

要在 tinker 中将默认数据库连接设置为 'mysql_test' 我使用此命令:

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

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