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学习笔记 类的声明与对象实例化
Jun 13 PHP
PHP安全性漫谈
Jun 28 PHP
简单谈谈PHP中strlen 函数
Feb 27 PHP
php使用正则表达式去掉html中的注释方法
Nov 03 PHP
thinkPHP交易详情查询功能详解
Dec 02 PHP
phalcon model在插入或更新时会自动验证非空字段的解决办法
Dec 29 PHP
PHP实现根据数组的值进行分组的方法
Apr 20 PHP
php打开本地exe程序,js打开本地exe应用程序,并传递相关参数方法
Feb 06 PHP
PHP实现数组根据某个单元字段排序操作示例
Aug 01 PHP
laravel5实现微信第三方登录功能
Dec 06 PHP
PHP实现提高SESSION响应速度的几种方法详解
Aug 09 PHP
如何运行/调试你的PHP代码
Oct 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
在线竞拍系统的PHP实现框架(一)
2006/10/09 PHP
10个实用的PHP正则表达式汇总
2014/10/23 PHP
PHP中的switch语句的用法实例详解
2015/10/21 PHP
php xhprof使用实例详解
2019/04/15 PHP
详解PHP PDO简单教程
2019/05/28 PHP
JavaScript中void(0)的具体含义解释
2007/02/27 Javascript
Javascript解决常见浏览器兼容问题的12种方法
2010/01/04 Javascript
javascript特殊用法示例介绍
2013/11/29 Javascript
jQuery实现的产品自动360度旋转展示特效源码分享
2015/08/21 Javascript
JQuery实现左右滚动菜单特效
2015/09/28 Javascript
js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)
2015/11/09 Javascript
使用Bootstrap框架制作查询页面的界面实例代码
2016/05/27 Javascript
防止Node.js中错误导致进程阻塞的办法
2016/08/11 Javascript
js代码延迟一定时间后执行一个函数的实例
2017/02/15 Javascript
基于HTML5+JS实现本地图片裁剪并上传功能
2017/03/24 Javascript
JavaScript实现随机数生成器(去重)
2017/10/13 Javascript
浅析前端路由简介以及vue-router实现原理
2018/06/01 Javascript
Vue-cli3项目配置Vue.config.js实战记录
2018/07/29 Javascript
jQuery AJAX与jQuery事件的分析讲解
2019/02/18 jQuery
js实现文章目录索引导航(table of content)
2020/05/10 Javascript
Django中使用group_by的方法
2015/05/26 Python
python图像处理之反色实现方法
2015/05/30 Python
深入理解python多进程编程
2016/06/12 Python
浅析python实现scrapy定时执行爬虫
2018/03/04 Python
基于python 二维数组及画图的实例详解
2018/04/03 Python
解读python logging模块的使用方法
2018/04/17 Python
基于anaconda下强大的conda命令介绍
2018/06/11 Python
python多进程实现文件下载传输功能
2018/07/28 Python
pycharm使用matplotlib.pyplot不显示图形的解决方法
2018/10/28 Python
python+openCV对视频进行截取的实现
2020/11/27 Python
用pushplus+python监控亚马逊到货动态推送微信
2021/01/29 Python
北京天润融通.net面试题笔试题
2012/02/20 面试题
学生违反校规检讨书
2014/10/28 职场文书
2015年党风廉政建设责任书
2015/01/29 职场文书
2015年人民调解工作总结
2015/05/18 职场文书
MySQL查看表和清空表的常用命令总结
2021/05/26 MySQL