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.MVC的模板标签系统(四)
Sep 05 PHP
一次编写,随处运行
Oct 09 PHP
discuz authcode 经典php加密解密函数解析
Jul 12 PHP
PHP技术开发技巧分享
Mar 23 PHP
PHP 类商品秒杀计时实现代码
May 05 PHP
检测png图片是否完整的php代码
Sep 06 PHP
Codeigniter出现错误提示Error with CACHE directory的解决方案
Jun 12 PHP
php实现统计网站在线人数的方法
May 12 PHP
php正则匹配文章中的远程图片地址并下载图片至本地
Sep 29 PHP
Laravel给生产环境添加监听事件(SQL日志监听)
Jun 19 PHP
Laravel中的Auth模块详解
Aug 17 PHP
thinkphp5实现微信扫码支付
Dec 23 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
Zend studio for eclipse中使php可以调用mysql相关函数的设置方法
2008/10/13 PHP
Yii rules常用规则示例
2016/03/15 PHP
PHP实现从上往下打印二叉树的方法
2018/01/18 PHP
代码精简的可以实现元素圆角的js函数
2007/07/21 Javascript
关于IE、Firefox、Opera页面呈现异同 写脚本很痛苦
2009/08/28 Javascript
EditPlus注册码生成器(js代码实现)
2013/03/25 Javascript
原生Js实现元素渐隐/渐现(原理为修改元素的css透明度)
2013/06/24 Javascript
javascript实现存储hmtl字符串示例
2014/04/25 Javascript
javascript实现切换td中的值
2014/12/05 Javascript
setinterval()与clearInterval()JS函数的调用方法
2015/01/21 Javascript
Javascript中获取对象的原型对象的方法小结
2015/02/25 Javascript
JS实现自定义简单网页软键盘效果代码
2015/11/05 Javascript
值得分享的JavaScript实现图片轮播组件
2016/11/21 Javascript
js addDqmForPP给标签内属性值加上双引号的函数
2016/12/24 Javascript
单行 JS 实现移动端金钱格式的输入规则
2017/05/22 Javascript
详解webpack进阶之插件篇
2017/07/06 Javascript
vue2.0 computed 计算list循环后累加值的实例
2018/03/07 Javascript
微信小程序实现录音时的麦克风动画效果实例
2019/05/18 Javascript
JS变量提升及函数提升实例解析
2020/09/03 Javascript
antd Select下拉菜单动态添加option里的内容操作
2020/11/02 Javascript
[54:53]完美世界DOTA2联赛PWL S2 GXR vs PXG 第二场 11.18
2020/11/18 DOTA
解决python3 urllib 链接中有中文的问题
2018/07/16 Python
python将一个英文语句以单词为单位逆序排放的方法
2018/12/20 Python
python RC4加密操作示例【测试可用】
2019/09/26 Python
Python逐行读取文件内容的方法总结
2020/02/14 Python
python实现低通滤波器代码
2020/02/26 Python
Kipling凯浦林美国官网:世界著名时尚休闲包袋品牌
2016/08/24 全球购物
Bally美国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/05/18 全球购物
印度购买眼镜和太阳镜网站:Coolwinks
2018/09/26 全球购物
汽车技术服务与营销专业在籍生自荐信
2013/09/28 职场文书
总经理助理职责
2014/02/04 职场文书
大二法英学生职业生涯规划范文
2014/02/27 职场文书
团日活动总结报告
2014/06/25 职场文书
中韩经贸翻译专业大学生职业生涯规划范文
2014/09/18 职场文书
Go语言中break label与goto label的区别
2021/04/28 Golang
VUE解决跨域问题Access to XMLHttpRequest at
2022/05/06 Vue.js