Yii2外部数据检索困难

时间:2014-11-28 08:28:44

标签: php yii2

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

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

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

e.g。

$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";

在我的案例中不会出现分页......我如何解决这个问题?如果这不是与外部数据服务交谈的想法,那么你的建议是什么?

1 个答案:

答案 0 :(得分:0)

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

如果您希望DataProvider使用远程抓取,我建议您通过扩展MyRemoteDataProvider并至少覆盖这四种方法来创建自己的BaseDataProvider类:

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实施的启发。