yii yii cdbcriteria 分页怎么使用函数

Yii CDbCriteria的常用方法 - Likwo - 博客园
$criteria&=&new&CDbC&&&&&&
$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;&&
&*&一些public&vars&
$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&CDbC$criteria-&alias&=&'Invoice';$criteria-&join='LEFT&JOIN&Client&ON&Client.id=Invoice.clientId';$criteria-&condition='Client.businessId='.&Yii::app()-&userInfo-&&21774人阅读
Yii CDbCriteria 常用方法
注:$c = new CDbCriteria();是ActiveRecord的一种写法,使ActiveRecord更加灵活,而不是手册中DAO(PDO)和Query Builder。
小小点评一下:感觉这部分手册做的一般。
链接地址:/doc/api/1.1/CDbCriteria
这是Yii CDbCriteria的一些笔记和常用用法:
一、一个sql拼装的情况
$criteria = new CDbC
//函数方式
$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)&,
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:542590次
积分:3954
积分:3954
排名:第7239名
原创:19篇
转载:130篇
评论:43条
(1)(1)(1)(1)(2)(4)(3)(2)(19)(2)(1)(1)(2)(3)(1)(1)(3)(1)(1)(2)(5)(4)(7)(11)(1)(5)(9)(7)(9)(21)(1)(1)(1)(1)(1)(4)(6)(2)(1)(1)(1)一、执行原生太SQL的PDO方式。
复制代码代码如下:
$sql = "";//原生态sql语句&xx::model()-&dbConnection-&createCommand($sql)-&execute();
二、Active Record方式&(1)New 方式
复制代码代码如下:
$post=new P&$post-&title='sample post';&$post-&content='post body content';&$post-&save();
(2)Criteria方式&也可以使用 $condition 指定更复杂的查询条件。 不使用字符串,我们可以让 $condition 成为一个 CDbCriteria 的实例,它允许我们指定不限于 WHERE 的条件。&
复制代码代码如下:
$criteria=new CDbC&$criteria-&select='title';& // 只选择 'title' 列&$criteria-&condition='postID=:postID';&$criteria-&params=array(':postID'=&10);&$post=Post::model()-&find($criteria);
一种替代 CDbCriteria 的方法是给 find 方法传递一个数组。 数组的键和值各自对应标准(criterion)的属性名和值,上面的例子可以重写为如下:&
复制代码代码如下:
$post=Post::model()-&find(array(&&&& 'select'=&'title',&&&& 'condition'=&'postID=:postID',&&&& 'params'=&array(':postID'=&10),&));
当一个查询条件是关于按指定的值匹配几个列时,我们可以使用 findByAttributes()。我们使 $attributes 参数是一个以列名做索引的值的数组。在一些框架中,此任务可以通过调用类似 findByNameAndTitle 的方法实现。虽然此方法看起来很诱人,但它常常引起混淆、冲突和比如列名大小写敏感的问题。&三、Query Builder 方式&
复制代码代码如下:
$user = Yii::app()-&db-&createCommand()&&&& -&select('id, username, profile')&&&& -&from('tbl_user u')&&&& -&join('tbl_profile p', 'u.id=p.user_id')&&&& -&where('id=:id', array(':id'=&$id))&&&& -&queryRow();
阅读(...) 评论()The page is temporarily unavailable
nginx error!
The page you are looking for is temporarily unavailable.
Please try again later.
Website Administrator
Something has triggered an error on your
This is the default error page for
nginx that is distributed with
It is located
/usr/share/nginx/html/50x.html
You should customize this error page for your own
site or edit the error_page directive in
the nginx configuration file
/etc/nginx/nginx.conf.

我要回帖

更多关于 yii criteria join 的文章

 

随机推荐