简单聊聊关于Yii框架的CDbCriteria

来源:互联网 发布:qq解冻软件 编辑:程序博客网 时间:2024/06/04 18:52

简单聊一下Yii框架中的CDbCriteria:
通常我们使用Yii的CDbCriteria是用来查找数据,最典型的例子是查询功能。

$criteria=new CDbCriteria;

这样就创建了一个CDbCriteria,然后可以使用下面的这些方法:

$criteria->compare();$criteria->select='';$criteria->group='';...

等等这些Yii已经为我们封装好的查询、排序、GROUP BY语句,很简单,很实用。但是,你要有一些特殊的需求,比如查询求和:

$criteria->select="*, ifnull(sum(sys_income),0) as sum_schedule_income";

这样是不是可行?我尝试了一下,没有成功!也就是说CDbCriteria不支持这种SQL函数,只能做比较简单的查询。猜想:Yii只是帮我们做了简单的SQL语句转换,但是更为复杂的SQL函数没有继续做,我还没有查阅Yii具体实现的源码,只是猜测。
所以遇到这种需要更加复杂的需求,就只能另辟蹊径了。
用原生的SQL语句:

$sql = "select *,ifnull(sum(sys_income),0) as sum_schedule_income from a where sys_income<>0 group by sd_id,uid ";$datas = Yii::app()->mydb->createCommand($sql)->queryAll();

同样,使用$criteria->with,是用来查找关联表的数据,很实用、简单。但是,如果我只想查找关联表中的某几个字段,例如user表中的用户名和所在单位这两个字段,但是user表中还存放着用户的账号和密码,使用$criteria会查找关联表中的所有数据。当然,在stackoverflow上有介绍只查询关联表中某几个字段的,没尝试成功,o(╯□╰)o……
所以,遇到这种复杂的情况最好还是优先选择原生SQL吧,坑有点多,有时间具体研究一下源代码,看是否可以改进一下。

原创粉丝点击