разбивка на страницы SqlDataProvider не работает, когда я использую вызов хранимой процедуры
Я использую 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 ответ
Ваша ошибка в том, что хранимые процедуры на самом деле ничего не возвращают, а хранимые функции возвращают только одно значение. Так что прямого решения нет, даже с ArrayDataProvider.
Обходной путь - использовать промежуточную таблицу для связи. Вы можете передать уникальный идентификатор запроса вашей процедуре, а результат вставить в тело процедуры в промежуточную таблицу с идентификатором запроса.
Используйте поставщик данных в промежуточной таблице. После завершения обработки вы можете удалить записи с идентификатором запроса из промежуточной таблицы.