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网站基础优化方法小结
Sep 29 PHP
php中让上传的文件大小在上传前就受限制的两种解决方法
Jun 24 PHP
PHP的preg_match匹配字符串长度问题解决方法
May 03 PHP
ThinkPHP3.1新特性之动态设置自动完成和自动验证示例
Jun 19 PHP
ThinkPHP文件缓存类代码分享
Apr 22 PHP
PHP中is_file()函数使用指南
May 08 PHP
PHP Cookei记录用户历史浏览信息的代码
Feb 03 PHP
php 无限级分类 获取顶级分类ID
Mar 13 PHP
PHP获取页面执行时间的方法(推荐)
Dec 10 PHP
详解如何在云服务器上部署Laravel
Jun 30 PHP
实例讲解PHP中使用命名空间
Jan 27 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
Nov 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 字符过滤类,用于过滤各类用户输入的数据
2009/05/27 PHP
php下安装配置fckeditor编辑器的方法
2011/03/02 PHP
php中cookie实现二级域名可访问操作的方法
2014/11/11 PHP
PHP微信开发之二维码生成类
2015/06/26 PHP
PHP图形操作之Jpgraph学习笔记
2015/12/25 PHP
php如何实现不借助IDE快速定位行数或者方法定义的文件和位置
2017/01/17 PHP
php根据用户名和手机号查询是否存在手机号码
2017/02/16 PHP
JavaScript高级程序设计 读书笔记之八 Function类及闭包
2012/02/27 Javascript
js模拟滚动条(横向竖向)
2013/02/22 Javascript
浅谈javascript中的闭包
2015/05/13 Javascript
Java Mybatis框架入门基础教程
2015/09/21 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单
2016/11/25 Javascript
详解Windows下安装Nodejs步骤
2017/05/18 NodeJs
js 提取某()特殊字符串长度的实例
2017/12/06 Javascript
详解Vue CLI3配置解析之css.extract
2018/09/14 Javascript
利用Dectorator分模块存储Vuex状态的实现
2019/02/05 Javascript
jQuery高级编程之js对象、json与ajax用法实例分析
2019/11/01 jQuery
[59:30]VG vs LGD 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.22
2019/09/05 DOTA
python中常用的各种数据库操作模块和连接实例
2014/05/29 Python
Python中的yield浅析
2014/06/16 Python
Python查找两个有序列表中位数的方法【基于归并算法】
2018/04/20 Python
Python爬取豆瓣视频信息代码实例
2019/11/16 Python
python基于celery实现异步任务周期任务定时任务
2019/12/30 Python
pytorch逐元素比较tensor大小实例
2020/01/03 Python
Python并发请求下限制QPS(每秒查询率)的实现代码
2020/06/05 Python
使用phonegap检测网络状态的方法
2017/03/30 HTML / CSS
尤妮佳moony海外旗舰店:日本殿堂级纸尿裤品牌
2018/02/23 全球购物
意大利在线大学图书馆:Libreria universitaria
2019/07/16 全球购物
Sandro法国官网:法国成衣品牌
2019/08/28 全球购物
优秀团员个人的自我评价
2013/10/02 职场文书
给水工程专业毕业生自荐信
2014/01/28 职场文书
社会实践活动总结范文
2014/07/03 职场文书
店铺转让协议书(2014版)
2014/09/23 职场文书
党员教师四风自我剖析材料
2014/09/30 职场文书
Python OpenCV 图像平移的实现示例
2021/06/04 Python
深入浅出讲解Java8函数式编程
2022/01/18 Java/Android