Stored procedures 使用存储过程调用时,SqlDataProvider的分页不起作用

Stored procedures 使用存储过程调用时,SqlDataProvider的分页不起作用,stored-procedures,pagination,yii2,yii2-model,csqldataprovider,Stored Procedures,Pagination,Yii2,Yii2 Model,Csqldataprovider,我正在使用SQLDataProvider调用一个过程,该过程返回一个记录列表,但我无法让它工作 我尝试的是: $dataProvider = new SqlDataProvider([ 'sql' => "CALL ErroresEnHoras(:project_id, :fecha_iniciop, :fecha_finp, :proyecto)", 'params' => [

我正在使用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是:调用ErroresEnHoras(0,NULL,NULL,NULL)LIMIT 10

我知道为什么会出错,因为查询出错了。 还有别的办法吗


事先非常感谢

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

解决方法是使用中间表进行通信。您可以向过程传递一个唯一的查询ID,然后将过程主体中的结果插入到具有查询ID的中间表中


使用中间表上的数据提供程序。处理完成后,您可以从中间表中删除带有查询ID的记录。

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

解决方法是使用中间表进行通信。您可以向过程传递一个唯一的查询ID,然后将过程主体中的结果插入到具有查询ID的中间表中


使用中间表上的数据提供程序。处理完成后,您可以从中间表中删除带有查询ID的记录。

分页使用
限制
,这在
更新
/
选择
/
删除
查询时可以正常工作-但您正在调用一个不支持该操作的存储过程。根据存储过程的功能,您可以切换到视图并从中进行选择。如果过程返回的记录数固定且较小,您可以尝试查询所有记录并使用
ArrayDataProvider
-只要您没有数千条记录,它就可以正常工作。分页使用
LIMIT
,这适用于
更新
/
选择
/
删除
查询-但您正在调用一个不支持该操作的存储过程。根据存储过程的功能,您可以切换到一个视图并从中进行选择。如果存储过程返回的记录数固定且较小,您可以尝试查询所有记录并使用
ArrayDataProvider
——只要您没有数千条记录,它就可以正常工作。这不是真的。存储过程确实没有函数返回值,但它们可以返回结果集。看到这个例子@MichalHynčica你是对的,但是我没有看到任何在Yii SQLDataProvider中使用结果集的解决方案。这不是真的。存储过程确实没有函数返回值,但它们可以返回结果集。看到这个例子@MichalHynčica你是对的,但是我没有看到任何在Yii SQLDataProvider中使用结果集的解决方案。