Laravel 4.2 открывает вторую базу данных подключения к основной базе данных
У меня есть одна база данных для моего приложения laravel, но мне нужно открыть два соединения с ним в Laravel по следующей причине.
У меня есть этот код:
$pdo = DB::connection()->getPdo();
$pdo->setAttribute( PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false );
$query = $pdo->query( "SOME QUERY PULLING MILLIONS OF ROWS" );
while ( $row = $query->fetch( PDO::FETCH_ASSOC ) ) {
// Some function that writes the result to file
// and updates a row in a table to keep track of the process
}
Я использую небуферизованный запрос, так как у меня недостаточно памяти, чтобы подготовить весь набор результатов в память, мы говорим миллионы строк здесь. Но мне нужно следить за тем, сколько строк было обработано, поэтому у меня есть функция, которая записывает данные обратно в таблицу состояния каждые 10 000 обработанных строк. Проблема в том, что во время выполнения небуферизованного запроса вы не можете выполнить обратную запись в MYSQL до его завершения.
Так что мне нужно сделать, чтобы этот небуферизованный выше запрос запустил новое соединение, но к той же базе данных, что и приложение.
Так возможно ли это? Как подключить новое соединение в Laravel к той же базе данных, которую приложение уже использует, не закрывая существующее соединение?
1 ответ
В конфигурации приложения создайте новое соединение с базой данных с теми же деталями соединения с базой данных, что и у вашей основной базы данных, и назовите его как-то иначе
Тогда в коде вы можете использовать второе соединение следующим образом:
$pdo = DB::connection('connection 2 name here')->getPdo();
Это откроет новое соединение, если оно еще не открыто.