和DAO查询一样,AR查询我们也分几种情况来讨论
查询单条数据
对于单条数据的查询,AR为我们封装了好几种,这里我只介绍两种我认为常用的
对于主键查询或者是包含主键查询的查询,我们可以使用findByPk方法,该方法在修改和删除中使用过,此处不再赘述
对于不包含主键的查询,我们可以使用find($condition,$param)方法
比如,我们想查询一个名叫 ‘学友’的用户
public function actionFind(){ $model = User::model()->find('username=:username',array(':username'=>'学友')); dump($model->attributes); }打印结果如下图:
对于多条数据的查询,我们可以使用findAll($condition,$params)
比如,我们想查询城市id在1和2里面的用户
public function actionFindall(){ $models = User::model()->findAll('city_id in (1,2)'); dump(count($models)); }
对于多条数据的查询,我们有更好的替代方法,可以使用‘查询生成器对象CDbCriteria结合FindAll方法来使用’
比如,我们想查询id大于等于1,并且小于5,城市id在1-3之间,名字里面带一个‘鑫’字的用户信息
public function actionCriteria(){ $criteria = new CDbCriteria(); //增加一个查询条件 $criteria->addCondition('id>=1'); $criteria->addCondition('id<:id');//可以使用占位符的方式 $criteria->params[':id'] = 5; //in查询 $criteria->addInCondition('city_id', array(1,2)); //like查询 $criteria->addSearchCondition('username', '鑫'); $models = User::model()->findAll($criteria); dump($models); }打印结果如下图:查询出来2条符合条件的信息 查询器criteria还封装了很多查询中需要使用到的方法,比如select,limit,offset,join等方法,使用方法与addCondition类似,这里就不一一介绍了