Yii2 学习笔记之分页

一、使用LinkPager

1.1 模型方式

<?php
// Controller 中写入代码
$query = User::find();
$pagination = new Pagination(['totalCount' => $query->count(), 'defaultPageSize' => 2]);
$models = $query->offset($pagination->offset)->limit($pagination->limit)->all();
return $this->render('test', [
    'models' => $models,
    'pagination' => $pagination,
]);

对应view代码

<?php foreach ($models as $model): ?>
   <?= $model->id; ?>
   <?= $model->username; ?>
   <?= $model->email; ?>
   <br/>
<?php endforeach; ?>

<?php echo LinkPager::widget([
    'pagination' => $pagination,
]); ?>

1.2 SQL方式

当单表无法满足需求时,就需要用到原生SQL进行实现,比如多表级联。 第1步 - SiteController 添加 actionTest() 方法

<?php
public function actionTest(){
    $connection = Yii::$app->db;
    $sql = "SELECT * FROM user";
    $rows = $connection->createCommand($sql)->queryAll();
    $pagination = new Pagination(['totalCount' => count($rows), 'defaultPageSize' => 2]);

    $models = $connection->createCommand($sql." limit ".$pagination->limit." offset ".$pagination->offset."")->queryAll();

    return $this->render('test',[
        'models' => $models,
        'pagination' => $pagination,
    ]);
}

对应view代码

<?php
    use yii\widgets\LinkPager;
?>
<?php foreach ($models as $model): ?>
    <?= $model['id']; ?>
    <?= $model['username']; ?>
    <?= $model['email']; ?>
    <br/>
<?php endforeach; ?>

<?php
    echo LinkPager::widget([
      'pagination' => $pagination,
    ]);
?>

后台经常使用到GridView,因为GridView自带检索、排序、增删改查,很适合后台使用,所以这里讲一讲和GridView的结合。

二、使用 GridView

2.1 模型方式

<?php
// Controller 中写入代码
$dataProvider = new ActiveDataProvider([
	'query' => User::find(),
]);

return $this->render('test', [
	      'dataProvider' => $dataProvider,
    ]);

对应view代码

<?php
<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'columns' => [
        ['class' => 'yii\grid\SerialColumn'],

        'id',
        'username',
        'email',

        ['class' => 'yii\grid\ActionColumn'],
    ],
]); ?>

2.2 SQL方式

<?php
// Controller中写入代码
$count = Yii::$app->db->createCommand('SELECT COUNT(*) FROM user WHERE status=:status', [':status' => 1])->queryScalar();

// 这里用的是SqlDataProvider,更多可参考([数据提供者](http://www.kancloud.cn/wangking/yii2/211308))
$dataProvider = new SqlDataProvider([
    'sql' => 'SELECT * FROM user WHERE status=:status',
    'params' => [':status' => 1],
    'totalCount' => $count,
    'pagination' => [
         'pageSize' => 20,
    ],
]);

return $this->render('test', [
	  'dataProvider' => $dataProvider,
]);

对应view代码

<?php
<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'columns' => [
        ['class' => 'yii\grid\SerialColumn'],

        'id',
        'username',
        'email',

        ['class' => 'yii\grid\ActionColumn'],
    ],
]); ?>

(完)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏乐沙弥的世界

Oracle 角色、配置文件

增加或删除角色中的某一权限,被授予该角色的所有用户或角色自动地获得新增权限或删除旧的权限

1012
来自专栏杨建荣的学习笔记

merge语句导致的CPU使用率过高的优化(r7笔记第4天)

今天有一个数据库有点反常,早上的时候报出了CPU使用率的警告。 警告内容如下: ZABBIX-监控系统: -----------------------...

3345
来自专栏沃趣科技

Oracle 12c 多租户专题|隔离PDB的磁盘IO

原文链接 https://oracle-base.com/articles/12c/multitenant-disk-iops-mdps-resource-ma...

3466
来自专栏杨建荣的学习笔记

深度解析dba_segments和sys.seg$中的细节差异(上) (r5笔记第27天)

今天在查看系统空间使用情况的时候,发现一个细节的问题,自己死磕了一把,还是发现了不少有价值的东西。 事情的起因是我在使用脚本在某个环境中查看每个用户所占有的空间...

3598
来自专栏乐沙弥的世界

FORALL 之 SAVE EXCEPTIONS 子句应用一例

     对于大批量的DML操作中出现的错误,除了使用DML error logging特性来记录在DML期间出现的错误之外,使用批量SQL语句FORALL的S...

711
来自专栏杨建荣的学习笔记

ORA-01427问题的分析和解决(r6笔记第51天)

前几天开发的同事反馈一个问题,说前台系统报出了ORA错误,希望我们能看看是什么原因。 java.sql.SQLException: ORA-01427: sin...

2804
来自专栏杨建荣的学习笔记

ORACLE数据文件名导致的奇怪问题 (51天)

今天创建了一些表空间,准备做data guard来看看效果。 为了方便起见,我用gridcontrol来做,主库也开了Omf,省去了好多步骤。 一路点下来,就等...

3314
来自专栏杨建荣的学习笔记

使用awk来解析dump文件 (73天)

dump文件是平时工作中经常碰见的,有时候得到一个dump,但是没有提供一些更多的信息,导入的时候就很可能会有问题。 如果某个用户默认表空间是user,但是du...

4368
来自专栏杨建荣的学习笔记

insert中启用错误日志的问题及分析(r2第10天)

在平时的工作中,有时候需要insert一批数据,这些数据可能是临时表,外部表,普通表,子查询等形式,类似下面的格式 insert into xxxx (sele...

3259
来自专栏杨建荣的学习笔记

执行计划变化导致CPU负载高的问题分析 (r8笔记第20天)

前几天碰到一个CPU负载较高的问题。从系统层面来看,情况不是很严重,但是从应用的角度来说,已经感觉到很慢了。因为前端的调用频率还是比较高。所以会把这个问题放大。...

2687

扫码关注云+社区

领取腾讯云代金券