Yii框架中 find findAll 查找出制定的字段的方法对比
发布:smiling 来源: PHP粉丝网 添加日期:2021-04-11 17:00:46 浏览: 评论:0
在yii框架中可以使用映射类的find方法取出一条数据或者用findall方法取出数条数据来,那么如何按照所需条件来取数据呢,主要用到了CDbCriteria这个类,这个类是yii自带的操作数据库的支持类
众所周知
modelName::model() -> find() //找出的是一个对象
modelName::model() -> findALL() //找出的是一个对象集合的数组
如何找出我所需要的字段的数据,而不是全部字段的数据
之前我是这么做的
- $criteria = new CDbCriteria;
- $criteria->select = 'username,id,email';
- $criteria->order = 'id DESC';
- $users = modelName::model()->findAll( $criteria );
后台无意中看到别人有这么写的,发现自己是多么的无知
- $users = modelName::model()->findAll(array(
- 'select' =>array('username','id','email'),
- 'order' => 'id DESC',
- ));
测试后发现果然可以用,那么find也可以这么操作
- $user = modelName::model()->find(array(
- 'select' =>array('username','id','email'),
- 'order' => 'id DESC',
- 'condition' => 'id='.$id,
- ));
当然了,这么做肯定不安全了,换成下面的方法同样可以
- $users = $this->user->find(array(
- 'select'=>array('id','username','email'),
- 'order' => 'id DESC',
- 'condition' => 'state=:state AND id=:id',
- 'params' => array(':state'=>'1',':id' => '2'),
- ));
同理用findAll测试了也可以,结论
通过这种方法能够很方便的获取所需要的数据,当然需要分页的时候还是 需要 new 以下 CDbCriteria 的
比如我要取出videoinfo表中的'v_id','title','big_class','sub_class','upload_time','comment_num' 等字段,且条件是status=1的,按照lastmodifytime倒序,且只取出3条即可,这样操作:
- $criteria = new CDbCriteria() ;
- $criteria -> select = array('v_id','title','big_class','sub_class','upload_time','comment_num');
- $criteria -> condition = 'status = 1';
- $criteria -> order = 'lastmodifytime desc';
- $criteria -> limit = 3; //www.phpfensi.com
- $criteria ->params = array (':status' => $你的变量) ;
- $result = VideoInfo::model()->findAll($criteria);
其中我注释掉的那一行是可以传变量的,用占位符表示,比如你的status需要按照变量来条件赋值的话,可以在注释的那行赋值,然后在condition条件写成
$criteria -> condition = 'status = :status';
即可,
这样,$result变量时你取得的结果,它是个对象列表,需要遍历一下:
- foreach ($result as $ob){
- print_r($ob->attributes);
- }
比如你想展示每个字段只需打出
$ob->attributes['title'];
等等即可
领完,CPagination类可以和CDbCriteria类以及前台的分页插件一起用来支持分页:
- $count =VideoInfo::model()->count($criteria)
- $pages=new CPagination($count);
- $pages->pageSize=30; //每页分多少条
- $pages->applyLimit($criteria);
- $result = VideoInfo::model()->findAll($criteria);
Tags: Yii字段对比
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)