【发布时间】:2016-12-17 14:38:32
【问题描述】:
对于几个控制台命令,我需要更改数据库,以便我所有雄辩的命令和查询都在正确的数据库(和服务器)上运行。
我见过一些解决方案,最简单的似乎是像这样更改配置:
$new_connection = [
'driver' => 'mysql',
'host' => '127.0.0.1',
'database' => 'test_db',
'username' => 'test',
'password' => 'test',
'charset' => 'utf8',
'collation' => 'utf8_general_ci',
'prefix' => '',
'strict' => false
];
config(['database.connections.mysql' => $new_connection]);
DB::purge('mysql');
(我注意到的)唯一的问题是当我尝试进行事务时,更具体地说,当我在 Codeception 的验收测试中进行事务时 - 它们根本不起作用。
我使用的命令是:
DB::connection()->beginTransaction(); // inside the _before function
和
DB::connection()->rollBack(); // inside the _after function
【问题讨论】:
-
在更改配置之前尝试调用
Artisan::call('config:cache');。我认为您的配置已被缓存,因此无法更改 -
@Kliment 我试过打电话给
config:cache,但得到这个错误=[Symfony\Component\Debug\Exception\FatalErrorException] Declaration of Symfony\Component\Console\Input\ArrayInput::hasParameterOption() must be compatible with Symfony\Component\Console\Input\InputInterface::hasParameterOption($values, $onlyParams = false) -
您能否更具体地了解第二个连接。您想在使用一组命令时替换所有查询的连接,还是想使用 2 个连接并能够切换查询?
-
@ParampalPooni 它在我的项目中运行良好。也许您在某处的配置中有错误?或其他一些错误。此错误似乎是命令中的问题。尝试从控制台调用
config:cache,看看是否抛出了同样的错误。 -
如果您的逻辑要求与数据库的实现如此紧密,您可能应该考虑一个更“松散”的实现,这实际上是一个“气味”警告,您的事情过于耦合,所以避免了简单的测试。
标签: laravel eloquent codeception