1

我正在使用 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

我知道为什么会出现错误,因为查询出错了。还有另一种方法吗?

非常感谢您提前

4

1 回答 1

0

你的错误是,存储过程并没有真正返回任何东西,而存储函数只返回一个值。所以没有直接的解决方案,甚至没有 ArrayDataProvider。

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

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

于 2020-01-09T17:15:11.060 回答