DataProvider----后续再补充!

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fujian9544/article/details/87176737

目的

它主要用于获取分页和数据排序

你可以通过配置 pagination 和 sort的属性来设定数据提供者的分页和排序行为。 属性分别对应于 yii\data\Pagination 和 yii\data\Sort。 你也可以对它们配置false来禁用分页和排序特性。

活动数据提供者

为了使用 yii\data\ActiveDataProvider,你应该配置其 query 的属性。 它既可以是一个 yii\db\Query 对象,又可以是一个 yii\db\ActiveQuery 对象。假如是前者,返回的数据将是数组; 如果是后者,返回的数据可以是数组也可以是 Active Record 对象。 例如,

使用 yii\db\ActiveQuery

use yii\data\ActiveDataProvider;

$query = Post::find()->where(['status' => 1]);

$provider = new ActiveDataProvider([
    'query' => $query,
    'pagination' => [
        'pageSize' => 10,
    ],
    'sort' => [
        'defaultOrder' => [
            'created_at' => SORT_DESC,
            'title' => SORT_ASC,
        ]
    ],
]);

// 返回一个Post实例的数组
$posts = $provider->getModels();

使用 yii\db\Query

use yii\db\Query; 
$query = (new Query())->from('post')->where(['status' => 1]); 

SQL数据提供者 

use yii\data\SqlDataProvider;

$count = Yii::$app->db->createCommand('
    SELECT COUNT(*) FROM post WHERE status=:status
', [':status' => 1])->queryScalar();

$provider = new SqlDataProvider([
    'sql' => 'SELECT * FROM post WHERE status=:status',
    'params' => [':status' => 1],
    'totalCount' => $count,
    'pagination' => [
        'pageSize' => 10,
    ],
    'sort' => [
        'attributes' => [
            'title',
            'view_count',
            'created_at',
        ],
    ],
]);

// 返回包含每一行的数组
$models = $provider->getModels();

 数组数据提供者

yii\data\ArrayDataProvider 非常适用于大的数组。数据提供者允许你返回一个 经过一个或者多个字段排序的数组数据页面。为了使用 yii\data\ArrayDataProvider, 你应该指定 allModels 属性作为一个大的数组。 这个大数组的元素既可以是一些关联数组(例如:DAO查询出来的结果) 也可以是一些对象(例如:Active Record实例) 例如,

use yii\data\ArrayDataProvider;

$data = [
    ['id' => 1, 'name' => 'name 1', ...],
    ['id' => 2, 'name' => 'name 2', ...],
    ...
    ['id' => 100, 'name' => 'name 100', ...],
];

$provider = new ArrayDataProvider([
    'allModels' => $data,
    'pagination' => [
        'pageSize' => 10,
    ],
    'sort' => [
        'attributes' => ['id', 'name'],
    ],
]);

// 获取当前请求页的每一行数据
$rows = $provider->getModels();

 后续再补充!

猜你喜欢

转载自blog.csdn.net/fujian9544/article/details/87176737