【发布时间】:2020-01-10 01:15:11
【问题描述】:
我正在使用 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 服务器版本相对应的手册,以在第 1 行的“LIMIT 10”附近使用正确的语法 正在执行的 SQL 是:CALL ErroresEnHoras(0, NULL, NULL, NULL) LIMIT 10
我知道为什么会出现错误,因为查询出错了。 还有其他方法吗?
非常感谢您
【问题讨论】:
-
分页使用
LIMIT,这适用于UPDATE/SELECT/DELETE查询 - 但您正在调用不支持的存储过程。根据您的存储过程的作用,您可以切换到视图并从中进行选择 -
如果过程返回的记录数量固定且很小,您可以尝试全部查询并使用
ArrayDataProvider- 只要您没有处理数千条记录,它应该可以正常工作。
标签: stored-procedures pagination yii2 yii2-model csqldataprovider