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的无限分类实现想法~
Jan 02 PHP
不重新编译PHP为php增加openssl模块的方法
Jun 14 PHP
php var_export与var_dump 输出的不同
Aug 09 PHP
ThinkPHP中U方法的使用浅析
Jun 13 PHP
PHP实现获取客户端IP并获取IP信息
Mar 17 PHP
详解PHP序列化反序列化的方法
Oct 27 PHP
PHP实现路由映射到指定控制器
Aug 13 PHP
SAE实时日志接口SDK用法示例
Oct 09 PHP
thinkPHP中volist标签用法示例
Dec 06 PHP
php微信公众号开发(4)php实现自定义关键字回复
Dec 15 PHP
PHP crypt()函数的用法讲解
Feb 15 PHP
laravel 解决后端无法获取到前端Post过来的值问题
Oct 22 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实现二分查找算法代码分享
2011/06/24 PHP
url decode problem 解决方法
2011/12/26 PHP
PHP大批量插入数据库的3种方法和速度对比
2014/07/08 PHP
PHP入门教程之表单与验证实例详解
2016/09/11 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
2017/07/31 PHP
jQuery动画效果-slideUp slideDown上下滑动示例代码
2013/08/28 Javascript
js整数字符串转换为金额类型数据(示例代码)
2013/12/26 Javascript
struts2+jquery组合验证注册用户是否存在
2014/04/30 Javascript
jQuery EasyUI Dialog拖不下来如何解决
2015/09/28 Javascript
解决URL地址中的中文乱码问题的办法
2017/02/10 Javascript
Vue 多层组件嵌套二种实现方式(测试实例)
2017/09/08 Javascript
使用Vuex实现一个笔记应用的方法
2018/03/13 Javascript
Puppet的一些技巧
2018/09/17 Javascript
[01:17]Ti4 循环赛第一日回顾
2014/07/11 DOTA
[14:03]2017DOTA2亚洲邀请赛开幕式:12神兵演绎水墨中华
2017/04/01 DOTA
[01:16:13]DOTA2-DPC中国联赛 正赛 SAG vs Dragon BO3 第一场 2月22日
2021/03/11 DOTA
Python中摘要算法MD5,SHA1简介及应用实例代码
2018/01/09 Python
Python日志模块logging基本用法分析
2018/08/23 Python
python机器学习之KNN分类算法
2018/08/29 Python
使用Python的SymPy库解决数学运算问题的方法
2019/03/27 Python
Python实现二叉树前序、中序、后序及层次遍历示例代码
2019/05/18 Python
python 杀死自身进程的实现方法
2019/07/01 Python
CSS3 圆角效果
2009/07/15 HTML / CSS
HTML5的结构和语义(2):结构
2008/10/17 HTML / CSS
美国最大的船只买卖在线市场:Boat Trader
2018/08/04 全球购物
英国领先的票务代理商之一:The Ticket Factory
2019/02/09 全球购物
党员思想汇报范文
2013/12/30 职场文书
物业招聘计划书
2014/01/10 职场文书
中考冲刺决心书
2014/03/11 职场文书
机电一体化应届生求职信
2014/08/09 职场文书
2015秋季小学开学寄语
2015/05/27 职场文书
公司趣味运动会开幕词
2016/03/04 职场文书
个人房屋租赁合同(标准范本)
2019/09/16 职场文书
详解python的内存分配机制
2021/05/10 Python
python缺失值的解决方法总结
2021/06/09 Python
redis缓存存储Session原理机制
2021/11/20 Redis