如何指定Tinker使用其他数据库连接?

liz*_*kya 2 database laravel artisan laravel-5.1 tinker

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

我可以使用以下方式更改播种中的数据库连接

php artisan db:seed --database=testing
Run Code Online (Sandbox Code Playgroud)

我想使用修补程序进行连接“测试”,但无法更改它。有什么方法可以像数据库种子一样更改修补程序的数据库连接?

Kri*_*and 7

由于您的问题开始于使用一个数据库进行测试/开发,而使用一个数据库进行生产,因此您应该研究使用不同的环境,这将使您在部署和本地测试之间的代码保持不变。


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

php artisan tinker --env=local
Run Code Online (Sandbox Code Playgroud)

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

使用时,local您从中读取变量/your-app/.env.local


对于您的特定用例:

php artisan db:seed --env=local
Run Code Online (Sandbox Code Playgroud)

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


小智 6

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

>>> use DB
>>> DB::setDefaultConnection('mysql_test');
Run Code Online (Sandbox Code Playgroud)

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