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调用Oracle存储过程
Oct 09 PHP
php array_intersect()函数使用代码
Jan 14 PHP
PHP读取XML值的代码(推荐)
Jan 01 PHP
PHP MySQL应用中使用XOR运算加密算法分享
Aug 28 PHP
色色整理的PHP面试题集锦
Mar 08 PHP
PHP文章采集URL补全函数(FormatUrl)
Aug 02 PHP
PHP人民币金额转大写实例代码
Oct 02 PHP
php 计算两个时间相差的天数、小时数、分钟数、秒数详解及实例代码
Nov 09 PHP
Yii核心验证器api详解
Nov 23 PHP
laravel5.2实现区分前后台用户登录的方法
Jan 11 PHP
laravel 5异常错误:FatalErrorException in Handler.php line 38的解决
Oct 12 PHP
PHP实现求连续子数组最大和问题2种解决方法
Dec 26 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源代码数组统计count分析
2011/08/02 PHP
php代码收集表单内容并写入文件的代码
2012/01/29 PHP
Dojo之路:如何利用Dojo实现Drag and Drop效果
2007/04/10 Javascript
javascript showModalDialog 多层模态窗口实现页面提交及刷新的代码
2009/11/28 Javascript
关于删除时的提示处理(确定删除吗)
2013/11/03 Javascript
jQuery 获取、设置HTML或TEXT内容的两种方法
2014/05/23 Javascript
JS 排序输出实现table行号自增前端动态生成的tr
2014/08/13 Javascript
分享28款免费实用的 JQuery 图片和内容滑块插件
2014/12/15 Javascript
详解angular2封装material2对话框组件
2017/03/03 Javascript
jQuery鼠标移动图片上实现放大效果
2017/06/25 jQuery
基于vue开发的在线付费课程应用过程
2018/01/25 Javascript
Node.js Buffer用法解读
2018/05/18 Javascript
js实现的在本地预览图片功能示例
2019/11/09 Javascript
Python实现对比不同字体中的同一字符的显示效果
2015/04/23 Python
Tensorflow实现卷积神经网络用于人脸关键点识别
2018/03/05 Python
对IPython交互模式下的退出方法详解
2019/02/16 Python
Python分布式进程中你会遇到的问题解析
2019/05/28 Python
对Python3中列表乘以某一个数的示例详解
2019/07/20 Python
Python开发企业微信机器人每天定时发消息实例
2020/03/17 Python
序列化Python对象的方法
2020/08/01 Python
关于django python manage.py startapp 应用名出错异常原因解析
2020/12/15 Python
Jupyter安装拓展nbextensions及解决官网下载慢的问题
2021/03/03 Python
HTML5 Canvas的事件处理介绍
2015/04/24 HTML / CSS
bonprix荷兰网上商店:便宜的服装、鞋子和家居用品
2020/07/04 全球购物
电子商务专业学生的自我鉴定
2013/11/28 职场文书
中级会计职业生涯规划范文
2014/01/16 职场文书
美德好少年主要事迹
2014/01/29 职场文书
大学生校园创业计划书
2014/02/08 职场文书
书香校园活动方案
2014/02/28 职场文书
个人承诺书
2014/03/26 职场文书
新农村建设典型材料
2014/05/31 职场文书
端午节活动总结
2014/08/26 职场文书
2014年大学生党员自我评议
2014/09/22 职场文书
法定代表人资格证明书
2015/06/18 职场文书
初中数学课堂教学反思
2016/02/17 职场文书
SQL Server连接查询的实用教程
2021/04/07 SQL Server