琯琯博客 纸上得来终觉浅,绝知此事要躬行。

Yii2 学习笔记之数据提供者

琯琯
2017-02-04
PHP  Yii
 

Yii提供了一组封装了分页和排序数据提供程序类。数据提供者实现了 yii\data\DataProviderInterface 接口。它支持检索排序和分页数据。数据提供者通常是窗口小部件一起使用。 Yii 包括:

  • ActiveDataProvider − 使用 yii\db\ActiveQuery 或 yii\db\Query 来从数据库中查询数据。
  • SqlDataProvider − 执行 SQ 语句并返回数组形式的数据。
  • ArrayDataProvider − 使用一个大的数组,并返回它的一个切片。您可以通过配置分页和排序的属性来定义数据提供者的排序和分页的行为。数据窗口小部件,如:yii\grid\GridView,它有一个 dataProvider 属性,它需要一个数据提供者实例,并在屏幕上显示的数据。

Active 数据提供者

public function actionTest()
{
   $query = User::find();
   $provider = new ActiveDataProvider([
        'query' => $query,
        'pagination' => [
            'pageSize' => 2,
        ],
   ]);
   // returns an array of users objects
   $users = $provider->getModels();
   var_dump($users);
}

SQL 数据提供者

yii\data\SqlDataProvider 类是使用原始的SQL语句方式工作的。

public function actionTest()
{
    $count = Yii::$app->db->createCommand('SELECT COUNT(*) FROM user')->queryScalar();
    $provider = new SqlDataProvider([
        'sql' => 'SELECT * FROM user',
        'totalCount' => $count,
        'pagination' => [
            'pageSize' => 5,
        ],
        'sort' => [
            'attributes' => [
                'id',
                'name',
                'email',
           ],
        ],
    ]);
    // returns an array of data rows
    $users = $provider->getModels();
    var_dump($users);
}

数组数据提供者

public function actionTest()
{
    $data = User::find()->asArray()->all();
    $provider = new ArrayDataProvider([
        'allModels' => $data,
        'pagination' => [
            'pageSize' => 3,
        ],
        'sort' => [
            'attributes' => ['id', 'name'],
        ],
    ]);
    // get the rows in the currently requested page
    $users = $provider->getModels();
    var_dump($users);
}

(完)


相关文章

评论

内容导航