Laravel多结果集查询构建器

时间:2018-06-01 13:32:13

标签: php sql-server laravel

我有一个MSSQL存储过程:

BEGIN
    SET NOCOUNT ON;
    SELECT [ID],
           [Type],
           [message]
    FROM [ir.pay].[dbo].[notifications]
    WHERE ReciverID = @userID;
    SELECT ID AS id,
           Website AS website,
           Status AS status
    FROM dbo.Customers
    WHERE UserID = @userID;
END;

我正在使用我的laravel应用执行此操作:

DB::connection('sqlsrv')->select('EXEC StoredProcedureName  @userID=1');

它只返回第一个SELECT查询结果。

我如何获得两个结果集?

4 个答案:

答案 0 :(得分:1)

我认为您的存储过程返回多个结果集,因此您必须移动到下一个结果集。我不熟悉Laravel,但我认为您使用SQLSRV驱动程序用于PHP。因此,在这种情况下,我使用MouseUpsqlsrv_next_result()。在Laravel中找到合适的方法并检查。

答案 1 :(得分:1)

通过编写波纹管功能解决:

function get_multi_result_set($conn, $statement)
{
    $results = [];
    $pdo = DB::connection($conn)->getPdo();
    $result = $pdo->prepare($statement);
    $result->execute();
    do {
        $resultSet = [];
        foreach ($result->fetchall(PDO::FETCH_ASSOC) as $res) {
            array_push($resultSet, $res);
        }
        array_push($results, $resultSet);
    } while ($result->nextRowset());

    return $results;
}

答案 2 :(得分:0)

您需要union

SELECT [ID], [Type], [message]
FROM [ir.pay].[dbo].[notifications]
WHERE ReciverID = @userID 
UNION ALL
SELECT ID, Website, Status
FROM dbo.Customers
WHERE UserID = @userID;

答案 3 :(得分:0)

您可以利用DB::statement();

为了创建商店程序,您可以像这样创建。 E.g

DB::statement('
BEGIN
    SET NOCOUNT ON;
    SELECT [ID],
           [Type],
           [message]
    FROM [ir.pay].[dbo].[notifications]
    WHERE ReciverID = @userID;
    SELECT ID AS id,
           Website AS website,
           Status AS status
    FROM dbo.Customers
    WHERE UserID = @userID;
END;

');

要运行商店程序,您可以

DB::connection('sqlsrv')->statement('EXEC StoredProcedureName  @userID=1');

希望这有帮助。