手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表Tag:cdbcriteria

yii with的排序

Yii在自己的AR中实现了relations,于是我们可以利用relations实现一些left join或者其他join能做的事情,常见的大家都懂,什么 belongs_to,has_one,has_many,many_to_many之类的
但用的最多的,一般都是has_one,has_many,毕竟查关联数据这个最方便了。

于是我们就会Table::model()->with('a','b')->findAll($cdbcriteria);
这个时候,如果需要用到a或b的排序,就有点痛苦,直接在$cdbcriteria中写的话,往往会报字段不存在,因此可以尝试这样
1、直接在relations中,在写成a时,直接加入'order'=>'id DESC'之类的内容
2、在with()中写: with(array('a'=>array('order'=>'id DESC'),'b'))

这样是不是就很方便了呢?
当然上面的代码是通过:

PHP代码
  1. public function with()  
  2. {  
  3.     if(func_num_args()>0)  
  4.     {  
  5.         $with=func_get_args();  
  6.         if(is_array($with[0]))  // the parameter is given as an array  
  7.             $with=$with[0];  
  8.         if(!empty($with))  
  9.             $this->getDbCriteria()->mergeWith(array('with'=>$with));  
  10.     }  
  11.     return $this;  
  12. }  

看了这段代码就基本上了解用法了,手册里也说了:
Specifies which related objects should be eagerly loaded. This method takes variable number of parameters. Each parameter specifies the name of a relation or child-relation. For example,

// find all posts together with their author and comments
Post::model()->with('author','comments')->findAll();
// find all posts together with their author and the author's profile
Post::model()->with('author','author.profile')->findAll();
The relations should be declared in relations().

By default, the options specified in relations() will be used to do relational query. In order to customize the options on the fly, we should pass an array parameter to the with() method. The array keys are relation names, and the array values are the corresponding query options. For example,
Post::model()->with(array(
    'author'=>array('select'=>'id, name'),
    'comments'=>array('condition'=>'approved=1', 'order'=>'create_time'),
))->findAll();
所以,有时候看看手册还是很重要的。

Tags: yii, with, cdbcriteria

Yii CDbCriteria的常用方法

这是Yii CDbCriteria的一些笔记和常用用法:

PHP代码
  1. $criteria = new CDbCriteria;      
  2. $criteria->addCondition("id=1"); //查询条件,即where id = 1  
  3. $criteria->addInCondition('id'array(1,2,3,4,5)); //代表where id IN (1,23,,4,5,);  
  4. $criteria->addNotInCondition('id'array(1,2,3,4,5));//与上面正好相法,是NOT IN  
  5. $criteria->addCondition('id=1','OR');//这是OR条件,多个条件的时候,该条件是OR而非AND  
  6. $criteria->addSearchCondition('name''分类');//搜索条件,其实代表了。。where name like '%分类%'  
  7. $criteria->addBetweenCondition('id', 1, 4);//between 1 and 4   
  8.   
  9. $criteria->compare('id', 1);    //这个方法比较特殊,他会根据你的参数自动处理成addCondition或者addInCondition,  
  10.                                 //即如果第二个参数是数组就会调用addInCondition  
  11. /** 
  12.  * 传递变量 
  13.  */  
  14. $criteria->addCondition("id = :id");  
  15. $criteria->params[':id']=1;  
  16. /** 
  17.  * 一些public vars 
  18.  */  
  19. $criteria->select = 'id,parentid,name'//代表了要查询的字段,默认select='*';  
  20. $criteria->join = 'xxx'//连接表  
  21. $criteria->with = 'xxx'//调用relations   
  22. $criteria->limit = 10;    //取1条数据,如果小于0,则不作处理  
  23. $criteria->offset = 1;   //两条合并起来,则表示 limit 10 offset 1,或者代表了。limit 1,10  
  24. $criteria->order = 'xxx DESC,XXX ASC' ;//排序条件  
  25. $criteria->group = 'group 条件';  
  26. $criteria->having = 'having 条件 ';  
  27. $criteria->distinct = FALSE; //是否唯一查询   

有需要用到的可以查看一下。。。

Tags: yii, cdbcriteria