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 服务器版本对应的手册,了解在第 1 行的"LIMIT 10"附近使用的正确语法 正在执行的 SQL 是: CALL ErroresEnHoras(0, NULL, NULL, NULL( LIMIT 10

我知道为什么会出现错误,因为查询出错了。 有没有其他方法可以做到这一点?

提前非常感谢

你的错误是,存储过程实际上不返回任何内容,而存储函数只返回一个值。所以没有直接的解决方案,即使是ArrayDataProvider也没有。

解决方法是使用中间表进行通信。可以将唯一的查询 ID 传递给过程,并将过程正文中的结果插入到具有查询 ID 的中间表中。

对中间表使用数据访问接口。处理准备就绪后,可以从中间表中删除具有查询 ID 的记录。

最新更新