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 获取当前访问的url文件名的方法小结
Feb 08 PHP
用PHP的超级变量$_POST获取HTML表单(HTML Form) 数据
May 07 PHP
php daddslashes()和 saddslashes()有哪些区别分析
Oct 26 PHP
php 发送带附件邮件示例
Jan 23 PHP
linux下安装php的memcached客户端
Aug 03 PHP
PHP使用适合阅读的格式显示文件大小的方法
Mar 05 PHP
PHP简单实现数字分页功能示例
Aug 24 PHP
php版微信数据统计接口用法示例
Oct 12 PHP
PHP查询分页的实现代码
Jun 09 PHP
PHP实现动态删除XML数据的方法示例
Mar 30 PHP
php实现构建排除当前元素的乘积数组方法
Oct 06 PHP
PHP递归算法的简单实例
Feb 28 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与MYSQL中UTF8编码的中文排序实例
2014/10/21 PHP
php命令行(cli)下执行PHP脚本文件的相对路径的问题解决方法
2015/05/25 PHP
php中array_multisort对多维数组排序的方法
2020/06/21 PHP
PHP可变变量学习小结
2015/11/29 PHP
CI框架数据库查询缓存优化的方法
2016/11/21 PHP
php获取访问者浏览页面的浏览器类型
2017/01/23 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
2020/03/27 PHP
PHP dirname功能及原理实例解析
2020/10/28 PHP
javascript在一段文字中的光标处插入其他文字
2007/08/26 Javascript
JavaScript+html5 canvas绘制渐变区域完整实例
2016/01/26 Javascript
浅析JavaScript中浏览器的兼容问题
2016/04/19 Javascript
Bootstrap弹出带合法性检查的登录框实例代码【推荐】
2016/06/23 Javascript
jQuery如何防止Ajax重复提交
2016/10/14 Javascript
js和jquery中获取非行间样式
2017/05/05 jQuery
js 两个日期比较相差多少天的实例
2017/10/19 Javascript
微信小程序实现点击按钮移动view标签的位置功能示例【附demo源码下载】
2017/12/06 Javascript
Angular设置别名alias的方法
2018/11/08 Javascript
JavaScript查看代码运行效率console.time()与console.timeEnd()用法
2019/01/18 Javascript
Python入门篇之函数
2014/10/20 Python
Python urllib、urllib2、httplib抓取网页代码实例
2015/05/09 Python
Python数据分析之双色球中蓝红球分析统计示例
2018/02/03 Python
Python发送邮件的实例代码讲解
2019/10/16 Python
Django全局启用登陆验证login_required的方法
2020/06/02 Python
python利用 keyboard 库记录键盘事件
2020/10/16 Python
Python基于tkinter canvas实现图片裁剪功能
2020/11/05 Python
Python使用struct处理二进制(pack和unpack用法)
2020/11/12 Python
英国运动风奢侈品购物网站:Maison De Fashion
2020/08/28 全球购物
妇产科护士自我鉴定
2013/10/15 职场文书
学习“七一”讲话精神体会
2014/07/08 职场文书
2014县政府领导班子对照检查材料思想汇报
2014/09/25 职场文书
2015年煤矿安全工作总结
2015/05/23 职场文书
2019升学宴主持词范本5篇
2019/10/09 职场文书
Vue实现动态查询规则生成组件
2021/05/27 Vue.js
Python操作CSV格式文件的方法大全
2021/07/15 Python
Spring中的使用@Async异步调用方法
2021/11/01 Java/Android
CentOS8.4安装Redis6.2.6的详细过程
2021/11/20 Redis