Для нескольких консольных команд мне нужно изменить базы данных, чтобы все мои красноречивые команды и запросы выполнялись на правильном db (и сервере).Динамическое соединение db связи
Я видел несколько решений, проще, кажется, изменение конфигурации, как так:
$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 :: вызов («конфигурации: кэш»);' перед изменением конфигурации. Я думаю, что ваша конфигурация уже кэширована и не позволяет ей изменять – Kliment
@Kliment я попытался вызвать 'config: cache', но получить эту ошибку =' '' [Symfony \ Component \ Debug \ Exception \ FatalErrorException] Объявление Symfony \ Component \ Консоль \ Вход \ ArrayInput :: hasParameterOption() должна быть совместима с Symfony \ Component \ Console \ Input \ InputInterface :: hasParameterOption ($ values, $ onlyParams = false) '' ' –
Можете ли вы уточнить второе соединение. Вы хотите заменить соединение для всех своих запросов при использовании набора команд или вы хотите использовать 2 подключения и сможете переключать свои запросы? – Sylwit