Yii CGridView 之 SQL 语句

在CGridView里,有时候需要用到复杂的查询时,可用 CSqlDataProvider替换CActiveDataProvider,

CSqlDataProvider 可用复杂的查询语句,例子如下:

1.在控制器中:

    public function actionIndex()
    {
        $count = Yii::app()->db->createCommand(‘SELECT COUNT(*) FROM app_item‘)->queryScalar();
        $sql = ‘SELECT * FROM app_item‘;
        $dataProvider = new CSqlDataProvider($sql, array(
            ‘totalItemCount‘ => $count,//数量
            ‘sort‘ => array(
                ‘attributes‘ => array(
                    ‘name‘=>array(‘label‘=>‘名称‘),
                    ‘type‘=>array(‘label‘=>‘类型‘),
                    ‘data‘=>array(‘label‘=>‘数据‘)
                )
            ),
            ‘keyField‘=>‘name‘,//Yii 默认的主键是 id,而我的数据库默认的是 name,所以这里设定 name
            ‘pagination‘ => array(
                ‘pageSize‘ => 10
            ),
        ));
        $this->render(‘index‘,array(‘dataProvider‘=>$dataProvider));
    }

    //自定义函数,用于 type字段的解释
    public function get_type($data,$row){
        $type = $data["type"];
        if( $type == 1 ) {
            echo ‘权限‘;
        }elseif( $type == 2 ) {
            echo ‘角色‘;
        }elseif( $type == 0 ) {
            echo ‘任务‘;
        }
    }

2.在视图中

$this->widget(‘zii.widgets.grid.CGridView‘, array(
    ‘id‘=>‘app-item-grid‘,
    ‘dataProvider‘=>$dataProvider,
    ‘columns‘=>array(
        array(
            ‘id‘=>‘CheckBox‘,//输出复选框
            ‘class‘=>‘CCheckBoxColumn‘,
            ‘selectableRows‘ => ‘50‘,
        ),
        ‘name‘,//保持原样
        array(
            ‘name‘=>‘type‘,
            ‘type‘=>‘raw‘,
            ‘value‘=>array($this,‘get_type‘),   //get_type 是自定义的函数
            ‘htmlOptions‘=>array(‘width‘=>"100px"),   //设置样式
        ),
        array(
            ‘header‘=>‘附加字段‘,
            ‘value‘=>‘substr($data["name"],0,3)‘,//如果是 CActiveDataProvider 时用对象方式 $data->name
        ),
    ),
))

3.结果如下

时间: 2024-10-10 13:59:18

Yii CGridView 之 SQL 语句的相关文章

Yii查看(输出)当前页面执行的sql语句

在Yii框架下查看当前页面执行的所有sql语句的方法,主要是通过配置相关文件来达到调试sql的目的,具体方法如下: (1)修改 index.php 开启调试模式 在 index.php 文件内增加如下两行代码(如果不存在的话): 查看代码 打印 1 //开启调试模式 2 defined('YII_DEBUG') or define('YII_DEBUG',true); 3 //设置日志记录级别,YII_TRACE_LEVEL的数字越大,信息越清楚 4 defined('YII_TRACE_LEV

php框架Yii - 可以在直接执行SQL语句(包括模型,控制器、视图)

$connection = Yii::app()->db;   $sql = "SELECT * FROM `project` ORDER BY id DESC";   $command = $connection->createCommand($sql);   $result = $command->queryAll();   print_r($result); 一行代码也就是 YII::app()->db->createCommand($sql)-&g

sql语句中3表删除和3表查询

好久没来咱们博客园了,主要近期在忙一些七七八八的杂事,包括打羽毛球比赛的准备和自己在学jqgrid的迷茫.先不扯这些没用的了,希望大家能记得小弟,小弟在此谢过大家了. 回归正题:(以下的sql是本人在用yii框架开发项目时写的,希望对大家有些帮助) 首先是多表查询,为了简化我先贴出自己的代码,在贴出解释代码. select a.*, b.*, c.* from rlzy_payfeeinf a inner join rlzy_personinfo b on a.bid=b.bid join rl

使用过得sql语句展示--会不断更新完善

这篇博文主要是对我自己用过的sql语句进行展示,然后不断完善,形成自己写sql语句的风格,并提高自己sql语句的运行速度.之前自己对左连接等一系列的sql语句都不是很熟悉,经过这几天的学习和项目中实际需求的使用,学会了一些sql语句.现在将我写的sql语句展示出来.主要分为两类,一类是通过yii框架里的sql语句写法,一类是正常的sql语句. 先说正常的sql语句吧. 1.首先是多表查询,先涉及到的是join方法,下面这条连接,有几个点需要注意,一个是group by的使用,group by的话

Yii单表常用语句

通过GET方式获取网页&id的数值 // $request = \yii::$app->request; // $id=$request->get('id'); // dd($id); // $data = [ // 'userName' => "wqpeixun.com", // 'ip' => 1270101, // 'arr' =>[ // 'age' => 1, // 'class' => '1班' // ], //// ];

oracle sql语句运行效率

--当前执行sql语句 SELECT a.SID , a.SERIAL# , a.USERNAME , b.PARSE_CALLS , b.PARSING_SCHEMA_NAME , b.CPU_TIME / 1000000 , b.ELAPSED_TIME / 1000000 , b.DISK_READS , b.DIRECT_WRITES , b.BUFFER_GETS , a.event , b.sql_text , b.SQL_FULLTEXTFROM v$session a INNER

sql 语句之 case

case语句语法: --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END --Case搜索函数 CASE WHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女' ELSE '其他' END 首先创建一张users表,其中包含id,name,sex三个字段,表内容如下: 复制代码 SQL> drop table users purge; drop table users p

用sql语句导出oracle中的存储过程和函数

用sql语句导出oracle中的存储过程和函数: SET echo off ; SET heading off ; SET feedback off ; SPOOL 'C:/PRC.SQL' replace SELECT CASE WHEN LINE = 1 THEN 'CREATE OR REPLACE ' || TEXT WHEN LINE = MAX_LINE THEN TEXT || CHR(10 ) || '/' ELSE TEXT END FROM USER_SOURCE A LEF

JDBC系列:(3)使用PreparedStatement执行sql语句

执行sql语句的接口 接口 作用 Statement接口 用于执行静态的sql语句 PreparedStatement接口 用于执行预编译sql语句 CallableStatement接口 用于执行存储过程的sql语句(call xxx) PreparedStatement Vs Statement 序号 不同 描述 1 语法不同 PreparedStatement可以使用预编译的sql,而Statment只能使用静态的sql 2 效率不同 PreparedStatement可以使用sql缓存区