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();

Это откроет новое соединение, если оно еще не открыто.

Другие вопросы по тегам