Пагинация SqlDataProvider не работает, когда я использую вызов хранимой процедуры - PullRequest
1 голос
/ 09 января 2020

Я использую SQLDataProvider для вызова процедуры, которая возвращает список записей, но я не могу заставить его работать

Я пытаюсь:

 $dataProvider = new SqlDataProvider([
            'sql' => "CALL ErroresEnHoras(:project_id, :fecha_iniciop, :fecha_finp, :proyecto)",
            'params' =>
            [
                ':project_id' => ($this->proyectoid == '' || is_null($this->proyectoid)) ? 0 : $this->proyectoid,
                ':fecha_iniciop' => ($filtrosModel->fecha_inicio == '' ? null : $filtrosModel->fecha_inicio ),
                ':fecha_finp' => ($filtrosModel->fecha_fin == '' ? null : $filtrosModel->fecha_fin ),
                ':proyecto' => ($filtrosModel->proyecto == '' ? null : $filtrosModel->proyecto)
            ],
            'totalCount' => 335,
            'pagination' => [
                'pageSize' => 10,
            ],
        ]);

ошибка:

SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 В синтаксисе SQL имеется ошибка; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с «LIMIT 10» в строке 1. Выполнялось SQL: CALL ErroresEnHoras (0, NULL, NULL, NULL) LIMIT 10

Я знаю, почему я получаю ошибку, потому что запрос идет неправильно. Есть ли другой способ сделать это?

Большое спасибо заранее

1 Ответ

0 голосов
/ 09 января 2020

Ваша ошибка в том, что хранимые процедуры на самом деле ничего не возвращают, а хранимые функции возвращают только одно значение. Таким образом, нет прямого решения, даже с ArrayDataProvider.

Обходной путь должен использовать промежуточную таблицу для связи. Вы можете передать уникальный идентификатор запроса в вашу процедуру и вставить результат в теле процедуры в промежуточную таблицу с идентификатором запроса.

Использовать поставщик данных в промежуточной таблице. После завершения обработки вы можете удалить записи с идентификатором запроса из промежуточной таблицы.

...