Yii中查询标准criteria理解

来源:互联网 发布:ubuntu获取管理员权限 编辑:程序博客网 时间:2024/06/03 07:20

查询标准是  CDbCriteria 的实例,它直接从 CComponent 派生,并且无子类,说明它具有相对独立性。从手册的解释看,查询标准意味着查询时的一些条件、排序、记录范围。CDbCriteria 属于包  system.db.schema,也表明它只为数据库服务,不在 system.db.ar下,说明它本身应该和 AR 没必然关系。


查询标准实例方法compare()  -------- 作用:添加(追加)一个比较表达式到 condition属性

public CDbCriteria compare(string $column, mixed $value, boolean $partialMatch=false, string $operator='AND', boolean $escape=true)

$column  是被比较的列名

$value  是比较的值

$partialMatch指示是否使用模糊匹配,即 LIKE或NOT LIKE

$operator 可以 < 、>、<=、>=、<>、=,如果不是这些值,表示相等或部分相等(模糊匹配,子串匹配),同时可以用AND 或 OR 表明新的条件和已有条件的关系

$escape 表示是否使用转义,在使用模糊匹配时必须转义


查询标准的属性$condition -------------作用:相当于 WHERE 子句,用一个字符串指定


查询标准实例方法addCondition() ----------作用:追加一个条件到已经存在的条件中(默认是AND关系)

public CDbCriteria addCondition(mixed $condition, string $operator='AND')


另外有

public CDbCriteria addInCondition(string $column, array $values, string $operator='AND')

public CDbCriteria addNotInCondition(string $column, array $values, string $operator='AND')

基本上SELECT查询中的各个部分都有对应的属性或方法


前面讲述CGridView中的searchNotInGroup,存在无法正常使用筛选器的问题,因为没有加列比较的条件,我们通过细化查询标准,可以解决:

        public function searchNotInGroup(Group $group)        {            $connection = Yii::app()->db;            $sql = 'select user_id from {{role}} except select user_id from {{role}} where '.                'group_id='.$group->id;            $command = $connection->createCommand($sql);            $rows = $command->queryAll();            $user_ids = array();            foreach($rows as $row)  $user_ids[] = $row['user_id'];                        $criteria = new CDbCriteria;            $criteria->compare('username', $this->username, true);  //用户名模糊查询            $criteria->compare('status', $this->status);            $criteria->addInCondition('id', $user_ids);            $criteria->order = 'username';                        return new CActiveDataProvider('User', array(                'criteria' => $criteria,                'pagination' => array(                    'pageSize' => 3,                ),            ));        }



0 0
原创粉丝点击