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
    }

我正在使用无缓冲查询,因为我没有足够的内存来将整个结果集准备到内存中,我们在这里谈论数百万行。但是我需要跟踪已经处理了多少行,所以我有一个函数可以每处理 10K 行就写回状态表。问题是当一个无缓冲的查询正在运行时,在它完成之前你不能写回 MYSQL。

所以我需要做的是让上面的这个无缓冲查询运行一个新的连接,但与应用程序使用的数据库相同。

那么有可能吗?如何在 Laravel 中启动一个新连接到应用程序已经使用的同一数据库而不关闭现有连接?

4

1 回答 1

0

在应用程序配置中,使用与主数据库相同的数据库连接详细信息创建一个新的数据库连接,并将其命名为不同的名称。

然后在代码中,您可以像这样使用第二个连接:

$pdo = DB::connection('connection 2 name here')->getPdo();

如果它尚未打开,这将打开一个新连接。

于 2015-03-11T09:24:05.433 回答