我的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
}
我使用了一个无缓冲的查询,因为我没有足够的内存将整个结果集准备到内存中,我们在这里谈论的是数百万行。但我需要跟踪处理了多少行,这样我就有了一个函数,每处理10K行就向状态表写回一行。问题是,当一个未缓冲的查询正在运行时,在它完成之前,您不能写回MYSQL。
因此,我需要做的是使上面的这个无缓冲查询运行一个新的连接,但连接到应用程序正在使用的同一数据库。
那么这有可能吗?如何在不关闭现有连接的情况下,在Laravel中建立与应用程序已在使用的同一数据库的新连接?
在应用程序配置中,创建一个与主数据库具有相同数据库连接详细信息的新数据库连接,并对其进行不同的调用。
然后在代码中,你可以使用第二个连接,如下所示:
$pdo = DB::connection('connection 2 name here')->getPdo();
这将打开一个尚未打开的新连接。