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面向对象编程快速入门
Oct 09 PHP
PHP网站提速三大“软”招
Oct 09 PHP
php minixml详解
Jul 19 PHP
需要发散思维学习PHP
Jun 29 PHP
PHP变量内存分配问题记录整理
Nov 27 PHP
ThinkPHP中的create方法与自动令牌验证实例教程
Aug 22 PHP
php动态变量定义及使用
Jun 10 PHP
WordPress后台中实现图片上传功能的实例讲解
Jan 11 PHP
CodeIgniter多语言实现方法详解
Jan 20 PHP
浅谈PHP的$_SERVER[SERVER_NAME]
Feb 04 PHP
PHP实现十进制、二进制、八进制和十六进制转换相关函数用法分析
Apr 25 PHP
总结PHP代码规范、流程规范、git规范
Jun 18 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图片库imagemagick安装方法
2014/09/23 PHP
php调用KyotoTycoon简单实例
2015/04/02 PHP
微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解
2019/04/10 PHP
PHP解密支付宝小程序的加密数据、手机号的示例代码
2021/02/26 PHP
对YUI扩展的Gird组件 Part-2
2007/03/10 Javascript
jquery多行滚动/向左或向上滚动/响应鼠标实现思路及代码
2013/01/23 Javascript
解析JavaScript中的不可见数据类型
2013/12/02 Javascript
js防止DIV布局滚动时闪动的解决方法
2014/10/30 Javascript
jquery性能优化高级技巧
2015/08/24 Javascript
js实现文字垂直滚动和鼠标悬停效果
2015/12/31 Javascript
JavaScript获取客户端IP的方法(新方法)
2016/03/11 Javascript
AngularJs Understanding the Model Component
2016/09/02 Javascript
js手机号4位显示空格,银行卡每4位显示空格效果
2017/03/23 Javascript
js的函数的按值传递参数(实例讲解)
2017/11/16 Javascript
vue数组对象排序的实现代码
2018/06/20 Javascript
javascript关于“时间”的一次探索
2019/07/24 Javascript
详解NodeJs项目 CentOs linux服务器线上部署
2019/09/16 NodeJs
python多线程threading.Lock锁用法实例
2014/11/01 Python
Python对文件操作知识汇总
2016/05/15 Python
Python的几个高级语法概念浅析(lambda表达式闭包装饰器)
2016/05/28 Python
实例讲解Python中global语句下全局变量的值的修改
2016/06/16 Python
Python排序搜索基本算法之归并排序实例分析
2017/12/08 Python
python爬虫爬取某站上海租房图片
2018/02/04 Python
python用post访问restful服务接口的方法
2018/12/07 Python
python3实现高效的端口扫描
2019/08/31 Python
基于pandas中expand的作用详解
2019/12/17 Python
python如何基于redis实现ip代理池
2020/01/17 Python
pytorch对梯度进行可视化进行梯度检查教程
2020/02/04 Python
python实现图片,视频人脸识别(opencv版)
2020/11/18 Python
翻新二手苹果产品的网络领导者:Mac of all Trades
2017/12/19 全球购物
女子锻炼服装和瑜伽服装:Splits59
2019/03/04 全球购物
Hush Puppies澳大利亚官网:舒适的男女休闲和正装鞋
2019/08/24 全球购物
创先争优活动方案
2014/02/12 职场文书
地球上的星星观后感
2015/06/02 职场文书
初中毕业生感言
2015/07/31 职场文书
环保建议书作文400字
2015/09/14 职场文书