Yii2 外部数据检索困难


Yii2 external data retrieving difficulties

让我解释一下我的问题,希望你能了解它是什么。

我有一个隐藏公共访问的 Web 服务,并设计了一种安全的 mysql sql 查询方式,用于跨网站的服务。 所以我认为我不能真正使用 Yii2 的当前模型层,这也意味着我几乎不能使用 activeDataProvider 因为没有数据库存在。

目前我所做的是编写原始sqls并获取所有结果,然后使用ArrayDataProvider输入数据提供者。

例如

$sql="select * from a_table";
$result=$remote->select($sql);
$dataProvider = new ArrayDataProvider([
    'allModels' => $result,
    'sort' => [
        'attributes' => ['date', 'name'],
    ],
    'pagination' => [
        'pageSize' => 10,
    ],
]);
return $this->render('index', [
    'dataProvider' => $dataProvider,
]);

这会带来一个问题,每次我需要查询整个表时。如果桌子很大,这不是问题。最好查询 10 个左右的大小,但是如果我这样做

$sql="select * from a_table LIMIT 10";

在我的情况下不会出现分页...如何解决此问题?如果这不是与外部数据服务对话的想法方式,您的建议是什么?

页不会出现,因为您只向 ArrayDataProvider 提供 10 行,并且它无法知道还有更多。

如果您想将DataProvider与远程获取一起使用,我建议您通过扩展BaseDataProvider并至少覆盖以下四种方法来创建自己的MyRemoteDataProvider类:

use yii'data'BaseDataProvider;
class MyRemoteDataProvider extends BaseDataProvider
{
    protected function prepareModels()
    {
    }
    protected function prepareKeys($models)
    {
    }
    protected function prepareTotalCount()
    { 
    }
    protected function sortModels($models, $sort)
    {
    }
}

.. 然后当然使用您的MyRemoteDataProvider而不是ArrayDataProvider.如果您不知道这些方法应该返回什么,请阅读 BaseDataProvider 的文档或从 ArrayDataProvider 实现中获得灵感。