私のlaravelアプリケーションには1つのデータベースがありますが、次の理由により、Laravelで2つの接続を開く必要があります。
私はこのコードを持っています:
$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
}
結果セット全体をメモリに準備するのに十分なメモリがないため、バッファなしのクエリを使用しています。ここでは数百万の行について話しています。しかし、処理された行数を追跡する必要があるので、処理された10K行ごとにステータステーブルに書き戻す関数があります。問題は、バッファリングされていないクエリの実行中は、終了するまでMYSQLに書き戻すことができないことです。
だから私がする必要があるのは、このバッファなしクエリを上記の新しい接続で実行することですが、アプリケーションが使用しているのと同じデータベースへの接続です。
それは可能ですか? Laravelで、アプリケーションがすでに使用しているのと同じデータベースへの新しい接続を、既存の接続を閉じずに起動するにはどうすればよいですか?
アプリケーション構成で、メインデータベースと同じデータベース接続の詳細で新しいデータベース接続を作成し、別の名前を付けます。
次に、コードで次のように2番目の接続を使用できます。
$pdo = DB::connection('connection 2 name here')->getPdo();
まだ開いていない場合は、新しい接続が開かれます。