Yii CDbCriteria 常用方法
一、一个sql拼装的情况
$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; //是否唯一查询
$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这么做是如何实现的
//可见
$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的情况
//在ActiveRecord中,增加条件限制
$this->getDbCriteria()->mergeWith(array(
'condition'=>"idc_id IN ($ids)",
));
Yii CDbCriteria 常用方法的更多相关文章
- Yii CDBCriteria常用方法
Yii CDbCriteria 常用方法 注:$c = new CDbCriteria();是ActiveRecord的一种写法,使ActiveRecord更加灵活,而不是手册中DAO(PDO)和Qu ...
- Yii CDbCriteria的常用方法
$criteria = new CDbCriteria; $criteria->addCondition("id=1"); //查询条件,即where id = 1 $cri ...
- Yii CDbCriteria的常用方法总结
查看代码 打印 01 $criteria=new CDbCriteria; 02 $criteria->addCondition("id=1");//查询条件,即wher ...
- Yii中CDbCriteria常用方法
最近在使用Yii 下面是常用到的方法,这里保存一下方便查看 $criteria =newCDbCriteria; $criteria->addCondition("id=1" ...
- yii CDbCriteria 类的总结
在编程中,我们通常会需要查询些东西,但是通过查询的时候,yii有个集成的类--- CDbCriteria():通过该类,我们可以更加便捷的调用数据. 参考网址:http://www.cnblogs.c ...
- Yii CDbCriteria
Yii的Active Recorder包装了很多. 特别是把SQL中 把where,order,limit,IN/not IN,like等常用短句都包含进CDbCriteria这个类中去,这样整个代码 ...
- Yii CDbCriteria常用用法
$criteria = new CDbCriteria;$criteria->compare('name',$this->name,true,'OR'); //like部分匹配//$cri ...
- Yii CDbCriteria类中方法
$criteria = new CDbCriteria; //select $criteria->select = '*';//默认* $criteria->select = 'id,na ...
- YII CDbCriteria总结
$criteria = new CDbCriteria; //$criteria->alias = 't'; //查询该表 $criteria->addInCondition('id', ...
随机推荐
- VI打开和编辑多个文件的命令
http://www.05112.org/school/xtrm/linux/2013/0625/4280.htmlVI打开和编辑多个文件的命令 可分两种情况: 1.在同一窗口中打开多个文件: v ...
- android离线地图源码
最近一直在玩Android手机,当然也忘不了在这个平台下搞些和地图相关的东西. Android手机自带了Google的地图软件,不过原来不支持离线浏览,所以很费流量,5.0版本以后可以支持离线浏览,需 ...
- 如何理解并学习javascript中的面向对象(OOP) [转]
如果你想让你的javascript代码变得更加优美,性能更加卓越.或者,你想像jQuery的作者一样,写出属于自己优秀的类库(哪怕是基于 jquery的插件).那么,你请务必要学习javascript ...
- C语言07指针高级
01内存四区 接口封装和设计思想引导 接口封装设计思想引导 Sckclient客户端api模型设计 第一套api函数 #ifndef _SCK_CLINT_H_ #define _SCK_CLINT_ ...
- 多进程对 MySQL update的影响
今天要做数据清洗的时候,要更新一个数据库字段,考虑到用多进程去更新数据库,也许程序会跑得快一些,结果开了64个进程, 结果是其他程序更新的时候,速度非常慢,最后发现的原因是,数据库中有64个SQL语句 ...
- 定时登录下载sftp服务器上的某些有规则的文件
[root@1-live duizhangdan]# cat wget.sh #!/bin/bash#定时下载sina sftp服务器上的bak_dir=`date -d"5 day ago ...
- oracle ORA-00119和ORA-00132解决方法
ORA-00119 ORA-00132解决方法. 思路:*.local_listener错误导致.要*.local_listener就要修改spfile文件,因为oracle默认是以spfile文件启 ...
- MySQL Study之--MySQL下图形工具的使用(MySQL Administrator)
MySQL Study之--MySQL下图形工具的使用(MySQL Administrator) 系统环境: 操作系统: Windows 7(64) 下载地址:http://www.soft ...
- Qt中使用DOM解析XML文件或者字符串(实例)
因为需要读取配置文件,我的配置文件采用xml:因此编写了使用qt读取xml文件内容的代码,xml文件如下: <?xml version="1.0" encoding=&quo ...
- Django修改用户名密码的方法
1.python manage.py shell 2.from django.contrib.auth.models import User 3.user=User.objects.get(usern ...