Laravel multi Построитель запросов - PullRequest
0 голосов
/ 01 июня 2018

У меня есть 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 голосов
/ 01 июня 2018

Решено написанием ниже функции:

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;
}
0 голосов
/ 01 июня 2018

Вы можете воспользоваться DB::statement();

Для создания процедуры магазина, которую вы можете создать следующим образом.Например,

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

Надеюсь, это поможет.

0 голосов
/ 01 июня 2018

Я думаю, что ваша хранимая процедура возвращает более одного набора результатов, поэтому вам нужно перейти к следующему набору результатов.Я не знаком с Laravel, но я думаю, что вы используете драйвер SQLSRV для PHP.Итак, в этом случае я использую sqlsrv_next_result() или PDOStatement::nextRowset().Найдите подходящий метод в Laravel и проверьте.

0 голосов
/ 01 июня 2018

Вам нужно 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...