【yii框架实现数据库操作】Yii框架实现数据分页及排序的例子

更新时间:2019-08-29    来源:Action    手机版     字体:

【www.bbyears.com--Action】

在控制器:

 代码如下

class PostController extends Controller
{
    function actionIndex()
    {
        $criteria = new CDbCriteria();
        $count=Post::model()->count($criteria);
        $pages=new CPagination($count);
 
        // elements per page
        $pages->pageSize=5;
        $pages->applyLimit($criteria);
 
        // sorting
        $sort = new CSort("Post");
        $sort->attributes = array("id", "title",);
        $sort->applyOrder($criteria);
 
        $models = Post::model()->findAll($criteria);
 
        $this->render("index", array(
            "models" => $models,
            "pages" => $pages,
            "sort" => $sort,
        ));
    }
}

在视图文件中:

 代码如下

link("id")?>


link("title")?>




       
           

    id?> - title?>


       


 
widget("CLinkPager", array(
    "pages" => $pages,
))?>

一. DAO实现分页.

[Controller层]

 代码如下

public function actionReport()
    {
        $sql = "select remitdate, sum(rate) sumrate from td_delivery
            group by remitdate
            order by remitdate desc";
        $criteria=new CDbCriteria();
        $result = Yii::app()->db->createCommand($sql)->query();
        $pages=new CPagination($result->rowCount);
        $pages->pageSize=2;
        $pages->applyLimit($criteria);
        $result=Yii::app()->db->createCommand($sql." LIMIT :offset,:limit");
        $result->bindValue(":offset", $pages->currentPage*$pages->pageSize);
        $result->bindValue(":limit", $pages->pageSize);
        $posts=$result->query();
        $this->render("report",array(
                "posts"=>$posts,
                "pages"=>$pages,
        ));
    }

[View层]


 $row["sumrate"]));?>
 " ?>
 
   //分页widget代码:
 $this->widget("CLinkPager",array("pages"=>$pages));
 ?>


优点: DAO效率高; 缺点: view层需要自己写一些样式,稍显麻烦一点

二. widget实现分页

[model层]

 代码如下

/**
     * @var string attribute : 日运费 (统计用)
     * 需要对新增加的字段做个声明
     */
    public $dayrate;


    /*
     * 统计功能: 统计每日的运费
     */
    public function statistics()
    {
        $criteria = new CDbCriteria;
        $criteria->select = "remitdate, sum(rate) AS dayrate";
        $criteria->group = "remitdate";
       
        return new CActiveDataProvider(get_class($this), array(
            "criteria"=>$criteria,
            "sort"=>array(
                // 表头设置点击排序的字段
                "attributes"=>array(
                    "remitdate",
                    "dayrate"=>array(
                        "asc"=>"dayrate",
                        "desc"=>"dayrate DESC",
                    )
                ),
                "defaultOrder"=>"remitdate desc",
            ),
        ));   
    }

[Controller层]

/**
     * 运单统计功能:
     * 按日期统计
     */
    public function actionReport()
    {
        $model=new Delivery("statistics");
        $model->unsetAttributes();  // clear any default values
        
        $this->render("report",array(
            "model"=>$model,
        ));
    }


[View层]

widget("zii.widgets.grid.CGridView", array(
    "id"=>"delivery-grid",
    "dataProvider"=>$model->statistics(),
    "filter"=>$model,
    "columns"=>array(
        "remitdate",
        "dayrate",
        array(
            "class"=>"CButtonColumn",
        ),
    ),
)); ?>

优点: 可以使用自带的样式; 缺点: 效率略低.

本文来源:http://www.bbyears.com/flash/64932.html

热门标签

更多>>

本类排行