Yii CDBCriteria常用方法实例小结


Posted in PHP onJanuary 19, 2017

本文实例讲述了Yii CDBCriteria常用方法。分享给大家供大家参考,具体如下:

注:$c = new CDbCriteria();是ActiveRecord的一种写法,使ActiveRecord更加灵活,而不是手册中DAO(PDO)和Query Builder。

小小点评一下:感觉这部分手册做的一般。

链接地址:http://www.yiiframework.com/doc/api/1.1/CDbCriteria

这是Yii CDbCriteria的一些笔记和常用用法:

一、一个sql拼装的情况

Php代码:

$criteria = new CDbCriteria;
//函数方式
$criteria->addCondition("id=1"); //查询条件,即where id = 1
$criteria->addInCondition('id', array(1,2,3,4,5)); //代表where id IN (1,23,,4,5,);
$criteria->addNotInCondition('id', array(1,2,3,4,5));//与上面正好相法,是NOT IN
$criteria->addCondition('id=1','OR');//这是OR条件,多个条件的时候,该条件是OR而非AND
$criteria->addSearchCondition('name', '分类');//搜索条件,其实代表了。。where name like '%分类%'
$criteria->addBetweenCondition('id', 1, 4);//between 1 and 4
$criteria->compare('id', 1); //这个方法比较特殊,他会根据你的参数自动处理成addCondition或者addInCondition,
//即如果第二个参数是数组就会调用addInCondition
$criteria->addCondition("id = :id");
$criteria->params[':id']=1;
//属性方式
$criteria->select = 'id,parentid,name'; //代表了要查询的字段,默认select='*';
$criteria->join = 'xxx'; //连接表
$criteria->with = 'xxx'; //调用relations
$criteria->limit = 10; //取1条数据,如果小于0,则不作处理
$criteria->offset = 1; //两条合并起来,则表示 limit 10 offset 1,或者代表了。limit 1,10
$criteria->order = 'xxx DESC,XXX ASC' ;//排序条件
$criteria->group = 'group 条件';
$criteria->having = 'having 条件 ';
$criteria->distinct = FALSE; //是否唯一查询

实例:

Php代码:

$criteria = new CDbCriteria();
$criteria->select = 'table_name,model_id,sum(amount) total';
$criteria->group = 'table_name,model_id';
$criteria->addCondition("$nIdcId=4");//也可以$criteria->condition = "$nIdcId=4";
$aResult = accessory_info::model()->findAll($criteria);
$c = new CDbCriteria();
$c->select = 't.id, t.created_at, t.outsource_id, t.user_id, t.operate, t.content';
$c->join = 'LEFT JOIN outsource ON outsource.id=t.outsource_id';
$c->condition = 'outsource.idc_id IN(' . implode(',', $idc_ids) . ')';
if($last_log_id) {
$c->condition .= " AND t.id > $last_log_id";
}
$c->limit = 20;
$c->order = 't.id DESC';
$logs = OutsourceProcessLog::model()->findAll($c);

批注:

1. 与DAO方式结果区别是:DAO方式 数组中的每一个元素仍是数组。而通过CDbCriteria方式,数组中的元素是对象。
2. 即使该功能很强大,仍有一些需求不能满足,此时仍需sql语句。比如select avg(num) amount from ****。
3. 打印运行后的结果,可更深入yii这么做是如何实现的

Php代码:

//可见
$c = new CDbCriteria();
$c->join = "JOIN idc_user on t.id=idc_user.user_id";
$c->condition = "idc_user.idc_id=$idc_id";
//运行后
object(CDbCriteria)#98 (12) { ["select"]=> string(1) "*" ["distinct"]=> bool(false) ["condition"]=> string(17) "idc_user.idc_id=6" ["params"]=> array(0) { } ["limit"]=> int(-1) ["offset"]=> int(-1) ["order"]=> string(0) "" ["group"]=> string(0) "" ["join"]=> string(38) "JOIN idc_user on t.id=idc_user.user_id" ["having"]=> string(0) "" ["with"]=> NULL ["alias"]=> NULL }
//User::model()->with('Idcs')->findAll($c)

二、mergeWith的情况

Php代码:

//在ActiveRecord中,增加条件限制
$this->getDbCriteria()->mergeWith(array(
'condition'=>"idc_id IN ($ids)",
));

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP+Tidy-完美的XHTML纠错+过滤
Apr 10 PHP
从php核心代码分析require和include的区别
Jan 02 PHP
PHP学习笔记之一
Jan 17 PHP
php文件上传表单摘自drupal的代码
Feb 15 PHP
UCenter 批量添加用户的php代码
Jul 17 PHP
PHP向socket服务器收发数据的方法
Jan 24 PHP
yii的入口文件index.php中为什么会有这两句
Aug 04 PHP
php 自定义错误日志实例详解
Nov 12 PHP
php中时间函数date及常用的时间计算
May 12 PHP
基于Laravel实现的用户动态模块开发
Sep 21 PHP
PHP简单实现模拟登陆功能示例
Sep 15 PHP
PHP number_format函数原理及实例解析
Jul 14 PHP
PHP对象实例化单例方法
Jan 19 #PHP
Yii框架引用插件和ckeditor中body与P标签去除的方法
Jan 19 #PHP
利用PHP获取网站访客的所在地位置
Jan 18 #PHP
PHP面向对象学习之parent::关键字
Jan 18 #PHP
php输出含有“#”字符串的方法
Jan 18 #PHP
php如何实现不借助IDE快速定位行数或者方法定义的文件和位置
Jan 17 #PHP
php中preg_replace正则替换用法分析【一次替换多个值】
Jan 17 #PHP
You might like
PHP判断IP并转跳到相应城市分站的方法
2015/03/25 PHP
PHP中FTP相关函数小结
2016/07/15 PHP
浅谈PHP错误类型及屏蔽方法
2017/05/27 PHP
PHP集成环境XAMPP的安装与配置
2018/11/13 PHP
JavaScript入门教程 Cookies
2009/01/31 Javascript
什么是JavaScript
2009/08/13 Javascript
javascript 清空form表单中某种元素的值
2009/12/26 Javascript
JavaScript中SQL语句的应用实现
2010/05/04 Javascript
关于js中window.location.href,location.href,parent.location.href,top.location.href的用法与区别
2010/10/18 Javascript
Js 时间函数getYear()的使用问题探讨
2013/04/01 Javascript
原生js ActiveXObject获取execl里面的值
2013/11/01 Javascript
avalonjs实现仿微博的图片拖动特效
2015/05/06 Javascript
JavaScript判断IE版本型号
2015/07/27 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之绑定事件
2015/11/19 Javascript
详解JavaScript对象类型
2016/06/16 Javascript
JavaScript实现移动端滑动选择日期功能
2016/06/21 Javascript
微信小程序 视图层(xx.xml)和逻辑层(xx.js)详细介绍
2016/10/13 Javascript
JS简单获取并修改input文本框内容的方法示例
2018/04/08 Javascript
vue 纯js监听滚动条到底部的实例讲解
2018/09/03 Javascript
微信小程序使用map组件实现检索(定位位置)周边的POI功能示例
2019/01/23 Javascript
js前端传json后台接收‘‘被转为quot的问题解决
2020/11/12 Javascript
基于Vue2实现移动端图片上传、压缩、拖拽排序、拖拽删除功能
2021/01/05 Vue.js
[32:26]EG vs IG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Sanic框架异常处理与中间件操作实例分析
2018/07/16 Python
对python的输出和输出格式详解
2018/12/08 Python
python中dict()的高级用法实现
2019/11/13 Python
详解Python中的format格式化函数的使用方法
2019/11/20 Python
如何利用python 读取配置文件
2021/01/06 Python
详解css3 object-fit属性
2018/07/27 HTML / CSS
高三自我鉴定
2013/10/23 职场文书
应届毕业生就业自荐信
2013/10/26 职场文书
关于赌博的检讨书
2014/01/24 职场文书
KTV门卫岗位职责
2014/10/09 职场文书
青年文明号申报材料
2014/12/23 职场文书
详解CSS开发过程中的20个快速提升技巧
2021/05/21 HTML / CSS
MySQL常用慢查询分析工具详解
2022/08/14 MySQL