zoukankan      html  css  js  c++  java
  • yii中数据的"增删改查"相关工作!(此文比较乱,需细看)

    使用findByPk()根据数据表主键查询的是对象,不需要使用foreach()循环出来
    
    但是使用findall()和find()查询的是对象类型的数组需要使用foreach()循环出来
    
    =======================================
    
    
    
    
        public function getMinLimit () {
            $sql = "...";
            $result = yii::app()->db->createCommand($sql);
            $query = $result->queryAll();
            return array (
                    $query [0] ['max'], 
            );
        }
    
     
    
     
    
     
    
    
    
    $connection=Yii::app()->db; 
    $sql="SELECT u.account,i.* FROM sys_user as u left join user_info as i on u.id=i.user_id";
    $rows=$connection->createCommand($sql)->query();
    foreach ($rows as $k => $v ){
        echo $v['add_time'];
    }
    
     
    
     
    
    ======================================== 事务
    
    $db = Yii::app()->db;
    $dbTrans = $db->beginTransaction();
    
    
    $dbTrans->commit();
    $dbTrans->rollback();
    
     
    
     
    
     
    
    ========================================  分页
    
     
    
    
    一般写法:
    $criteria = new CDbCriteria;
    $count = DnOnline::model()->count($criteria);
    $pages = new CPagination($count);               
    $pages->pageSize = 5;
    $pages->applylimit($criteria);
    $model = DnOnline::model()->findAll($criteria);
    
    记得控制器里有个函数paginate($itemCount,$pageSize=null,$pageVar=null)
    CDB写法:
    $criteria = new CDbCriteria;
    $sql = "SELECT * FROM USER";
    $model= Yii::app()->db->createCommand($sql)->queryAll();
    $pages = new CPagination(count($model));               
    $pages->pageSize = 4;
    $pages->applylimit($criteria);
    $model=Yii::app()->db->createCommand($sql." LIMIT :offset,:limit");
    $model->bindValue(':offset', $pages->currentPage*$pages->pageSize);
    $model->bindValue(':limit', $pages->pageSize);
    $model=$model->queryAll();
    
    或者:
    
          $criteria = new CDbCriteria;
          $connection=Yii::app()->db; 
          $sql="SELECT u.account,i.* FROM sys_user as u left join user_info as i on u.id=i.user_id ";
          $model= Yii::app()->db->createCommand($sql)->queryAll();
          $pages = new CPagination(count($model));               
          $pages->pageSize = 4;
          $pages->applylimit($criteria);
    
          $model=Yii::app()->db->createCommand($sql." LIMIT :offset,:limit");
          $model->bindValue(':offset', $pages->currentPage*$pages->pageSize);
          $model->bindValue(':limit', $pages->pageSize);
          $model=$model->queryAll();
    ======================================== 一、查询数据集合
    
    1、$admin=Admin::model()->findAll($condition,$params);
    该方法是根据一个条件查询一个集合,如:  
    findAll("username=:name",array(":name"=>$username));    
    
    
    2、$admin=Admin::model()->findAllByPk($postIDs,$condition,$params); 
    findAllByPk($id,"name like ':name' and age=:age",array(':name'=>$name,'age'=>$age));   
    该方法是根据主键查询一个集合,可以使用多个主键,如:  
    findAllByPk(array(1,2));   
    
    
    3、$admin=Admin::model()->findAllByAttributes($attributes,$condition,$params); 
    该方法是根据条件查询一个集合,可以是多个条件,把条件放到数组里面,如:  
    findAllByAttributes(array('username'=>'admin'));
    
    
    4、$admin=Admin::model()->findAllBySql($sql,$params); 
    该方法是根据SQL语句查询一个数组,如: 
    findAllBySql("select *from admin whereusername=:name",array(':name'=>'admin')); 
    
    ========================================  二、查询对像的方法 
    
    1、$admin=Admin::model()->findByPk($postID,$condition,$params);
     根据主键查询出一个对象,如:findByPk(1); 
    
     
     2、$row=Admin::model()->find($condition,$params);
     根据一个条件查询出一组数据,可能是多个,但是他只返回第一行数据,如: 
    find('username=:name',array(':name'=>'admin'));
    
     
    
          $userinfo=Userinfo::model()->find(array('condition'=>'user_id=:user_id','params'=>array(':user_id'=>$uid)));
          print_r($userinfo->user_id);
    
     
    
     
    
    
     3、$admin=Admin::model()->findByAttributes($attributes,$condition,$params);
     该方法是根据条件查询一组数据,可以是多个条件,把条件放到数组里面,他查询的也是第一条数据,如: 
    findByAttributes(array('username'=>'admin'));
    
    
     4、$admin=Admin::model()->findBySql($sql,$params);
     该方法是根据SQL语句查询一组数据,他查询的也是第一条数据,如:  
    findBySql("select *from admin whereusername=:name",array(':name'=>'admin'));
    
    
     5、拼一个获得SQL的方法,在根据find查询出一个对象 
    
    
    $criteria=new CDbCriteria;  
    $criteria->select='username'; // only select the 'title' column  
    $criteria->condition='username=:username'; 
    $criteria->params=array(':username=>'admin'); 
    $post=Post::model()->find($criteria); // $params isnot needed 
     
    ========================================  三、查询个数,判断查询是否有结果  
    
    1、$n=Post::model()->count($condition,$params);
     该方法是根据一个条件查询一个集合有多少条记录,返回一个int型数字,如  
    count("username=:name",array(":name"=>$username));   
    
    
     2、$n=Post::model()->countBySql($sql,$params);
     该方法是根据SQL语句查询一个集合有多少条记录,返回一个int型数字,如 
    countBySql("select *from admin whereusername=:name",array(':name'=>'admin'));
    
    
     3、$exists=Post::model()->exists($condition,$params); 
     该方法是根据一个条件查询查询得到的数组有没有数据,如果有数据返回一个true,否则没有找到 
            $sql = "select count(*) as count  from " . $this->tableName() . " where user_id = $userId";
            $query = $result->queryAll();
            $pageSize =10;
            $count = $query [0] ['count'];
            $pageCount = ceil($count / $pageSize);
            return $pageCount;
    
    ======================================== 四、添加的方法  
    $admin=newAdmin;        
    $admin->username=$username; 
    $admin->password=$password; 
    if($admin->save()>0){ 
       echo "添加成功";  
    }else{  
       echo "添加失败";  
    }
    
    $userLimit = new UserLimit();
    $userLimit->item = 0.30000;
    if($userLimit->insert(){
    
    }
    
    
    ======================================== 五、修改的方法 
    
    
    $userLimitRet = UserLimit::model()->findByPk(array (
                                    'user_id' => $userId, 
                                    'category_id' => $v 
                            ));
    $userLimitRet->order = $order;
    
    if (! $userLimitRet->update()) {
    } 
    $userAmount=userAmount::model()->findByPk($userId);
    $userAmount->credit=Yii::app()->request->getParam('credit',10000);
    $ret = $userAmount->save();
    
    
    1、Post::model()->updateAll($attributes,$condition,$params);
     $count =Admin::model()->updateAll(array('username'=>'11111','password'=>'11111'),'password=:pass',array(':pass'=>'1111a1'));
    if($count>0){  
       echo "修改成功";  
    }else{  
       echo "修改失败";  
    } 
    
     
    
     
    
     
    
     
    
     
    
    $ret = $this->updateAll(array (
                                    'set' => $Set
                            ), " user_id in ( " . $userIds . " )and category_id = " . $categoryId);
    
    if($ret){
        return true;
    }else {
        return false;
    }
    
     
    
     
    
    
     2、Post::model()->updateByPk($pk,$attributes,$condition,$params);
     $count =Admin::model()->updateByPk(1,array('username'=>'admin','password'=>'admin'));
    $count =Admin::model()->updateByPk(array(1,2),array('username'=>'admin','password'=>'admin'),'username=:name',array(':name'=>'admin'));
    if($count>0){  
       echo "修改成功";  
    }else{  
       echo "修改失败";  
    }  
    $pk代表主键,可以是一个也可以是一个集合,$attributes代表是要修改的字段的集合,$condition代表条件,$params传入的值

    $team_model = new TeamInfo;
    $uid_result_info = $team_model->findByPk($uid);

    $team_model->updateByPk($uid, array('speed_num' => $speed_num));

    
    
     3、Post::model()->updateCounters($counters,$condition,$params);
     $count=Admin::model()->updateCounters(array('status'=>1),'username=:name',array(':name'=>'admin'));
    if($count>0){  
       echo "修改成功";  
    }else{  
       echo "修改失败";  
    }  
    array('status'=>1)代表数据库中的admin表根据条件username='admin',查询出的所有结果status字段都自加1 
     
    ======================================== 六、删除的方法  
    1、Post::model()->deleteAll($condition,$params); 
     $count = Admin::model()->deleteAll('username=:nameandpassword=:pass',array(':name'=>'admin',':pass'=>'admin'));
             $id=1,2,3  
             deleteAll('id in(".$id.")');删除id为这些的数据 
    if($count>0){  
       echo "删除成功";  
    }else{  
       echo "删除失败";  
    }  
     2、Post::model()->deleteByPk($pk,$condition,$params); 
    $count = Admin::model()->deleteByPk(1); 
    $count =Admin::model()->deleteByPk(array(1,2),'username=:name',array(':name'=>'admin'));
    if($count>0){  
       echo "删除成功";  
    }else{  
       echo "删除失败";  
    }
    
    
    ————————————————————————————————————
    创建 create
    
    例:// insert into table values($name, $mail);
    
    execute  //return 被影响的行数  *可执行 insert update delete
    Yii::app()->db->createCommand("insert into table values($name, $mail)")->execute();   
    
    save    //return booler
    $model = new Post(); $model->field=$param;$model->save();   
    
    insert   //return booler
     Yii::app()->db->createCommand()->insert('table', array('name'=>'Tester', 'email'=>'tester@example.com',));   
    
    
    删除 delete
    
    例://delete from table where user=$id;
    execute   //return 被删除的行数  *可执行 insert update delete
    Yii::app()->db->createCommand("delete from table where user=$id")->execute();   
    
    delete    //return 被删除的行数
    Yii::app()->db->createCommand()->delete("table","user=:id",array(":id"=>$user));   
    
     delete    //return booler
    $model = Post::model()->findByPk(1); $model->delete();   
    
    deleteAll   //return 被删除的行数
    Post::model()->deleteAll("user=:id",array(":id"=>$id));    
    
    deleteAllByAttributes    //return 被删除的行数
    Post::model()->deleteAllByAttributes(array("user"=>$id),"name=:name",array(":name"=>$name));    
    
    deleteByPk    //return 被删除的行数   *pk(array(1,2)) 
    Post::model()->deleteByPk($id,"name=:name",array(":name"=>$name));    
    
    
    更新 update
    
    例://updae table set name=$name where user=$id;
    
    execute   //return 被更新的行数  *可执行 insert update delete
    Yii::app()->db->createCommand("updae table set name=$name where user=$id")->execute();  
    save     //return booler 
    $model = Post::model()->findByPk($id); $ model->name=$name;$model->save();  
    updateAll   //return 被更新的行数
     Post::model()->updateAll(array("name"=>$name),"user=:id",array(":id"=>$id));    
    
    updateByPk      //return 被更新的行数
    
    Post::model()->updateByPk($id,array("name"=>$name),$condition,array(":param"=>$param));   
    updateCount     //return 被更新的行数
    Post::model()->updateCounters(array("一般是计数器“=>1),"user=:id",array(":id"=>$id));     
    
    
    
    读取 read
    
    例://select * from table where user=$id and name=$name
    
    find    //return  record or null
    Post::model()->find("user=:id  and  name=:name",array(":id"=>$id,":name"=$name));
    
    findAll    //return  array()
    Post::model()->findAll("user=:id  and  name=:name",array(":id"=>$id,":name"=$name));
    findByAttributes     //return  record or null
    Post::model()->findByAttributes(array("name"=>$name),"user=:id",array(":id"=>$id))
    findAllByAttributes    //return   array()
    Post::model()->findAllByAttributes(array("name"=>$name),"user=:id",array(":id"=>$id));
    
    findByPK    //return  record or null
    Post::model()->findByPk($id,"name=:name",array(":name"=>$name));
    findAllByPk    //return array()
    Post::model()->findAllByPk($id,"name=:name",array(":name"=>$name));
    
    findBySql    //return  record or null
    Post::model()->findBySql("select * from table where user=? and name=?",array($id,$name);
    
    findAllBySql    //return  record or null
    Post::model()->findAllBySql("select * from table where user=? and name=?",array($id,$name);
    queryAll    //return  return array()
    Yii::app()->db->createCommand("select * from table where user=$id and name=$name")->queryAll();
    
    可以自己试一下
    query();      // 查询并返回结果                                  queryRow();       // 查询并返回结果中的第一行    
    queryColumn(); // 查询并返回结果中的第一列     queryScalar();  // 查询并返回结果中第一行的第一个字段
    
    ——————————————————————————————————————————————
    1.数据的”增删改查“通过控制器来完成。
    
    
    ======================================
    从表单获得数据,增加数据
      public function actionCreate()
     {
      $model=new Post;
      if(isset($_POST['Post']))
      {
       $model->attributes=$_POST['Post'];//增加数据
       if($model->save())
        $this->redirect(array('view','id'=>$model->id));
      }
      $this->render('create',array(
       'model'=>$model,
      ));
     }
    
    直接使用$_POST[]数组获得数据,提交的方式在视图里自动完成的。
    
    $model->attributes 会自动调用setAttributes()方法将表单里的值赋值给相应的变量(变量名和字段名相同)
    =======================================
    获得数据表数据
      public function actionIndex()
     {
      $dataProvider=new CActiveDataProvider('Post');
      $this->render('index',array(
       'dataProvider'=>$dataProvider,
      ));
     }
    
    使用CActiveDataProvider类来获得数据表的数据,传入AR的类名。
    =============================================================
    查找数据
      public function loadModel()
     {
      if($this->_model===null)
      {
       if(isset($_GET['id']))
    
       //这里的Post是个数据表(表名Post)(模型类)
        $this->_model=Post::model()->findbyPk($_GET['id']);//一行数据的对象
    
       if($this->_model===null)
        throw new CHttpException(404,'The requested page does not exist.');
      }
      return $this->_model;
     }
    
     public function actionView()
     {
      $this->render('view',array(
       'model'=>$this->loadModel(),
      ));
     }
    
    Post::model()->findbyPk() 是有数据模型提供的查找方法。
    URL:?r=post/view&id=1
    ================================================================
    更新数据
      public function actionUpdate()
     {
      $model=$this->loadModel();
      if(isset($_POST['Post']))
      {
       $model->attributes=$_POST['Post'];
       if($model->save())
        $this->redirect(array('view','id'=>$model->id));
      }
      $this->render('update',array(
       'model'=>$model,
      ));
     }
    
    URL:?r=post/update&id=1
    ==================================================
    删除数据
      public function actionDelete()
     {
      if(Yii::app()->request->isPostRequest)
      {
       $this->loadModel()->delete();
       if(!isset($_GET['ajax']))
        $this->redirect(array('index'));
      }
      else
       throw new CHttpException(400,'Invalid request. Please do not repeat this request again.');
     }
    
    
    2.来自  关于yii 数据库添加新字段之后model类的修改
    
    rules:
    
    array('新字段','safe','on'=>'search')
    
    1、array('新字段', 'safe')//这个如果是要用户输入的话,要加一下,
    
    2、array('新字段', 'numerical'),//如果是数字的话
    
    3、array('新字段', 'length', 'max'=>100),//如果是文本
    
    1、2、3适当的最少要加一条,新字段才会被保存。
    
    
    
    attributeLabels:
    
    '新字段'=>'新字段',//关于显示的label
    
    
    
    search:
    
    $criteria->compare('新字段',$this->新字段,true);//gridview靠的就是这里搜索的。
    
    给个gridview的添加例子:
    
    array('name'=>'新字段','filter'=>$array/*,'type'=>'raw'//貌似新版的YII不用这项,只要filter是个数组就可以了*/),
    
    ————————————————————————————————————————————————————————
    
    
    Yii AR Model 查询
     Yii AR很好很强大,但刚开始不知道怎么使用
    
      如果英文不错,可以直接看原文地址http://www.yiiframework.com/doc/guide/1.1/en/database.ar 
    
     下面是我对AR的一些理解
    
     对于一个Model Post 有如下的4中查询方法,返回对象或者对象数组。
    
     // find the first row satisfying the specified condition
    
    复制代码
    $post=Post::model()->find($condition,$params);
    // find the row with the specified primary key
    $post=Post::model()->findByPk($postID,$condition,$params);
    // find the row with the specified attribute values
    $post=Post::model()->findByAttributes($attributes,$condition,$params);
    // find the first row using the specified SQL statement
    $post=Post::model()->findBySql($sql,$params);
    复制代码
     
    
    假设我们查询postID = 10的数据,怎么查询呢,见下面
    
     // find the row with postID=10
    
    $post=Post::model()->find('postID=:postID', array(':postID'=>10));
    条件$condition 就是我们sql里的where部分,那参数怎么办呢,通过params传递,不过名字是加了":"的。
    
     
    
    YII有个CDbCriteria类来构造查询,如果我们查询postId为10的title,CdbCriteria是这样构造的
    
    $criteria=new CDbCriteria;
    $criteria->select='title';  // only select the 'title' column
    $criteria->condition='postID=:postID';
    $criteria->params=array(':postID'=>10);
    $post=Post::model()->find($criteria); // $params is not needed 
    
     
    
     你也可以写成下面这样
    
    $post=Post::model()->find(array(
        'select'=>'title',
        'condition'=>'postID=:postID',
        'params'=>array(':postID'=>10),
    )); 
    
     
    
    findByAttributes 里的
    
     $attributes就是字段的名字.
     
    
    查询title为abc怎么查询呢?见下面
    
    Post::model()->findByAttributes(array('title'=>'abc'))
     
    
     1、$admin=Admin::model()->findAll($condition,$params);     8 I eE7  
    
    Sw 1z ^`  
    该方法是根据一个条件查询一个集合,如: ,@ $Py J  
    findAll("username=:name",array(":name"=>$username));     sJI"m'r=Z  
    )9pRTdT  
    `6No6 . J  
    2、$admin=Admin::model()->findAllByPk($postIDs,$condition,$params); zl] Ic' _i  
    findAllByPk($id,"name like ':name' and age=:age" ,array(':name'=>$name,'age'=>$age));     u5'jIq lU  
    TPBL|^3K  
    该方法是根据主键查询一个集合,可以使用多个主键,如: Ye=c;0 V(w  
    findAllByPk(array(1,2)); >;sz (F3 )  
             E GL7z`nt  
    2lu A F 2  
    3、$admin=Admin::model()->findAllByAttributes($attributes,$condition,$params); g7l ?/ p[n  
    qS!U 1R?s  
    该方法是根据条件查询一个集合,可以是多个条件,把条件放到数组里面,如: E 4cPCQyeH  
    findAllByAttributes(array('username'=>'admin')); Q/ %] %d  
    bj r( )NM1  
    ([OD mZHv  
    4、$admin=Admin::model()->findAllBySql($sql,$params); O $(#gB'B  
    SH5a&OVZhn  
    该方法是根据SQL语句查询一个数组,如: }G ^nK m  
    findAllBySql("select *from admin where username=:name",array(':name'=>'admin')); W}P9I &3  
    ----------------------------------------------------------------------------- l& _Ps nU  
    二、查询对像的方法 4Xgz N wm  
    1、$admin=Admin::model()->findByPk($postID,$condition,$params); P{2j 31u `  
    Zq {TY)PI]  
    根据主键查询出一个对象,如:findByPk(1); 3a0% J '  
    '3iJ q 9  
    2、$row=Admin::model()->find($condition,$params); J Oo+RA5 d  
    @}io K=A  
    根据一个条件查询出一组数据,可能是多个,但是他只返回第一行数据,如: "h:#'y $V  
    find('username=:name',array(':name'=>'admin')); h |. {dv  
    %& !B2z }  
    3、$admin=Admin::model()->findByAttributes($attributes,$condition,$params); B:6VD /qC  
    V gO.i n^q  
    该方法是根据条件查询一组数据,可以是多个条件,把条件放到数组里面,他查询的也是第一条数据,如: p /gf  
    findByAttributes(array('username'=>'admin')); / U:F  
    6SE q 2  
    rSKZc`< ^  
    4、$admin=Admin::model()->findBySql($sql,$params); x zBUm  
    d_ji ..T  
    该方法是根据SQL语句查询一组数据,他查询的也是第一条数据,如: cG 5u $ B  
    findBySql("select *from admin where username=:name",array(':name'=>'admin')); gb/<(I )  
    a7"Aq:IjU  
    5、拼一个获得SQL的方法,在根据find查询出一个对象 AL*M` m _  
    $criteria=new CDbCriteria; 4 0 % <E  
    $criteria->select='username';  // only select the 'title' column TiD|.a8 S  
    $criteria->condition='username=:username'; d*l2x[8}g-  
    $criteria->params=array(':username=>'admin'); z|O3p Qn~  
    $post=Post::model()->find($criteria); // $params is not needed I.ku Y D62  
    _J>!K'Dz  
    r+,JM L  
    ------------------------------------------------------------------------------ R[}fr36>/  
    三、查询个数,判断查询是否有结果 K/z2. Npn  
    1、$n=Post::model()->count($condition,$params); #&ayW ef  
    `+@r 0:G&v  
    该方法是根据一个条件查询一个集合有多少条记录,返回一个int型数字,如 4tz@?T C b  
    count("username=:name",array(":name"=>$username));    R /l /GNm  
    '} F. .w/  
    2、$n=Post::model()->countBySql($sql,$params); %!]CP1 S  
    U3t) yr h  
    该方法是根据SQL语句查询一个集合有多少条记录,返回一个int型数字,如 ~LJ t lJ0  
    countBySql("select *from admin where username=:name",array(':name'=>'admin')); : b <<  
    ~{q; - &  
    3、$exists=Post::model()->exists($condition,$params); 0r]-Ltvl?}  
    [> |6qY$ D  
    该方法是根据一个条件查询查询得到的数组有没有数据,如果有数据返回一个true,否则没有找到 ;ApldoMi  
    3 #Xv))w 1  
    } a!c  
    ================================================================================================================= T) MZ` dM  
    四、添加的方法 -S 0dr8E  
    $admin=new Admin;        ` Te ,  
    $admin->username=$username; e V (  
    $admin->password=$password; j 9*5K j  
    if($admin->save()>0){ =[YjIWr #o  
        echo "添加成功"; "
    R0V! wA  
    }else{ y hNy  
        echo "添加失败"; jGtu >|Gj  
    }  6 : 7  
    ==================================================================================================================== [*d<LAnuWP  
    五、修改的方法 4[ = C,5r  
    1、Post::model()->updateAll($attributes,$condition,$params); lBNB8c0e"{  
    Ex4)R2c*  
    $count = Admin::model()->updateAll(array('username'=>'11111','password'=>'11111'),'password=:pass',array(':pass'=>'1111a1')); " eR- (c1  
    if($count>0){ VVH L @  
        echo "修改成功"; koy0 A/\%  
    }else{ |sn WO0i F  
        echo "修改失败"; V( 3rTDg  
    } Fz^5cx mw  
    m";?B 1%x  
    2、Post::model()->updateByPk($pk,$attributes,$condition,$params); [A#>G 4a<  
    R 6 qC0@ *  
    $count = Admin::model()->updateByPk(1,array('username'=>'admin','password'=>'admin')); @S?D }myD  
    $count = Admin::model()->updateByPk(array(1,2),array('username'=>'admin','password'=>'admin'),'username=:name',array(':name'=>'admin')); |e H *Q% M  
    if($count>0){ Z ~ H La  
        echo "修改成功"; zmh5x {US1  
    }else{ x *0mmlCb  
        echo "修改失败"; J 3A S"+ ]  
    } e(U b7 L#  
    $pk代表主键,可以是一个也可以是一个集合,$attributes代表是要修改的字段的集合,$condition代表条件,$params传入的值 k"J=CD P  
    L KI2R_ |n  
    3、Post::model()->updateCounters($counters,$condition,$params); ~V aO,8&+L  
    Y OY{f:ew  
    $count =Admin::model()->updateCounters(array('status'=>1),'username=:name',array(':name'=>'admin')); ~ I s-^k)y  
    if($count>0){ WU<C 7  
        echo "修改成功"; `KzNB H ,W  
    }else{ I CB'?y Z,  
        echo "修改失败"; zwp g f  
    } 0 @ *E w I  
    array('status'=>1)代表数据库中的admin表根据条件username='admin',查询出的所有结果status字段都自加1 T NK~ETE 4  
    QR] 61v :`  
    ================================================================================================================================================ VN! +r7w'  
    六、删除的方法 bH ! A  
    1、Post::model()->deleteAll($condition,$params); lL{1wCsl  
    [_SV $Jz  
    $count = Admin::model()->deleteAll('username=:name and password=:pass',array(':name'=>'admin',':pass'=>'admin')); &H< n 7 6G  
                $id=1,2,3 y %^TZ[S  
                deleteAll('id in(".$id.")');删除id为这些的数据 eLc@w<yB  
    if($count>0){ b `Agb <x"  
        echo "删除成功"; a =" ?L 5  
    }else{ _ Y M]U` *  
        echo "删除失败"; +G qV9x 8  
    } +S3r]D3 v/  
    $6 A91|ZSQ  
    2、Post::model()->deleteByPk($pk,$condition,$params); uI*2} Q  
    $count = Admin::model()->deleteByPk(1); zu8l2( N  
    $count = Admin::model()->deleteByPk(array(1,2),'username=:name',array(':name'=>'admin')); 8a SH0dX  
    if($count>0){ F;& a=R!.  
        echo "删除成功"; h5.>};"@ '  
    }else{ w u  
        echo "删除失败"; <hO|:LX  
    } qL03iV#h*V  
     t&i t&i
    #Php
     
    
    1、$admin=Admin::model()->findAll($condition,$params);     
     
    该方法是根据一个条件查询一个集合,如: 
    findAll("username=:name",array(":name"=>$username));     
     
     
    2、$admin=Admin::model()->findAllByPk($postIDs,$condition,$params); 
    findAllByPk($id,"name like ':name' and age=:age" ,array(':name'=>$name,'age'=>$age));     
     
    该方法是根据主键查询一个集合,可以使用多个主键,如: 
    findAllByPk(array(1,2)); 
             
     
    3、$admin=Admin::model()->findAllByAttributes($attributes,$condition,$params); 
     
    该方法是根据条件查询一个集合,可以是多个条件,把条件放到数组里面,如: 
    findAllByAttributes(array('username'=>'admin')); 
     
     
    4、$admin=Admin::model()->findAllBySql($sql,$params); 
     
    该方法是根据SQL语句查询一个数组,如: 
    findAllBySql("select *from admin where username=:name",array(':name'=>'admin')); 
    ----------------------------------------------------------------------------- 
    二、查询对像的方法 
    1、$admin=Admin::model()->findByPk($postID,$condition,$params); 
     
    根据主键查询出一个对象,如:findByPk(1); 
     
    2、$row=Admin::model()->find($condition,$params); 
     
    根据一个条件查询出一组数据,可能是多个,但是他只返回第一行数据,如: 
    find('username=:name',array(':name'=>'admin')); 
     
    3、$admin=Admin::model()->findByAttributes($attributes,$condition,$params); 
     
    该方法是根据条件查询一组数据,可以是多个条件,把条件放到数组里面,他查询的也是第一条数据,如: 
    findByAttributes(array('username'=>'admin')); 
     
     
    4、$admin=Admin::model()->findBySql($sql,$params); 
     
    该方法是根据SQL语句查询一组数据,他查询的也是第一条数据,如: 
    findBySql("select *from admin where username=:name",array(':name'=>'admin')); 
     
    5、拼一个获得SQL的方法,在根据find查询出一个对象 
    $criteria=new CDbCriteria; 
    $criteria->select='username';  // only select the 'title' column 
    $criteria->condition='username=:username'; 
    $criteria->params=array(':username=>'admin'); 
    $post=Post::model()->find($criteria); // $params is not needed 
     
     
    ------------------------------------------------------------------------------ 
    三、查询个数,判断查询是否有结果 
    1、$n=Post::model()->count($condition,$params); 
     
    该方法是根据一个条件查询一个集合有多少条记录,返回一个int型数字,如 
    count("username=:name",array(":name"=>$username));     
     
    2、$n=Post::model()->countBySql($sql,$params); 
     
    该方法是根据SQL语句查询一个集合有多少条记录,返回一个int型数字,如 
    countBySql("select *from admin where username=:name",array(':name'=>'admin')); 
     
    3、$exists=Post::model()->exists($condition,$params); 
     
    该方法是根据一个条件查询查询得到的数组有没有数据,如果有数据返回一个true,否则没有找到 
     
     
    ================================================================================================================= 
    四、添加的方法 
    $admin=new Admin;         
    $admin->username=$username; 
    $admin->password=$password; 
    if($admin->save()>0){ 
        echo "添加成功"; 
    }else{ 
        echo "添加失败"; 
    } 
    ==================================================================================================================== 
    五、修改的方法 
    1、Post::model()->updateAll($attributes,$condition,$params); 
     
    $count = Admin::model()->updateAll(array('username'=>'11111','password'=>'11111'),'password=:pass',array(':pass'=>'1111a1')); 
    if($count>0){ 
        echo "修改成功"; 
    }else{ 
        echo "修改失败"; 
    } 
     
    2、Post::model()->updateByPk($pk,$attributes,$condition,$params); 
     
    $count = Admin::model()->updateByPk(1,array('username'=>'admin','password'=>'admin')); 
    $count = Admin::model()->updateByPk(array(1,2),array('username'=>'admin','password'=>'admin'),'username=:name',array(':name'=>'admin')); 
    if($count>0){ 
        echo "修改成功"; 
    }else{ 
        echo "修改失败"; 
    } 
    $pk代表主键,可以是一个也可以是一个集合,$attributes代表是要修改的字段的集合,$condition代表条件,$params传入的值 
     
    3、Post::model()->updateCounters($counters,$condition,$params); 
     
    $count =Admin::model()->updateCounters(array('status'=>1),'username=:name',array(':name'=>'admin')); 
    if($count>0){ 
        echo "修改成功"; 
    }else{ 
        echo "修改失败"; 
    } 
    array('status'=>1)代表数据库中的admin表根据条件username='admin',查询出的所有结果status字段都自加1 
     
    ================================================================================================================================================ 
    六、删除的方法 
    1、Post::model()->deleteAll($condition,$params); 
     
    $count = Admin::model()->deleteAll('username=:name and password=:pass',array(':name'=>'admin',':pass'=>'admin')); 
                $id=1,2,3 
                deleteAll('id in(".$id.")');删除id为这些的数据 
    if($count>0){ 
        echo "删除成功"; 
    }else{ 
        echo "删除失败"; 
    } 
     
    2、Post::model()->deleteByPk($pk,$condition,$params); 
    $count = Admin::model()->deleteByPk(1); 
    $count = Admin::model()->deleteByPk(array(1,2),'username=:name',array(':name'=>'admin')); 
    if($count>0){ 
        echo "删除成功"; 
    }else{ 
        echo "删除失败"; 
    } 
    
    ___________________________________________________________________________________________________
    
    使用Yii开发 Find操作  
    
    
    |字号 订阅
    
    Yii里的ORM使用的是AR, 有几个主要的操作, 分别是:
    
    save - 操作数据update - 修改数据delete - 删除数据validate - 验证数据
    读取记录时, 有以下几个方法:
    
    findByPk - 通过主键查找记录, 结果为单条记录findByAttribute - 通过属性查找记录, 结果为单条记录findAllByAttributes - 通过属性查找数据, 结果为记录集findAll- 通过CDbCriteria对象查找数据, 结果为记录集 *
    查找方法接收的参数有2种, 没有星号的, 接受数组作为参数, 有星号的接收CDbCriteria对象作为参数, 使用对象的时候, 可以提供更多的查找条件, 下面给出一个实例:
    
    $criteria = new CDbCriteria; // 创建CDbCriteria对象$criteria->condition = 'title LIKE %' . 'php' . '%'; // 设置查询条件$criteria->order ='createdTime DESC'; // 设置排序条件$criteria->limit = 10; // 限定记录的条数$criteria->select = 'id,title,content'; // 设置结果所包含的字段$articles = Article::model()->findAll($criteria); //结果为数组, 其中每个元素为记录对象
    再次, Yii对关联数据默认采用LazyLoad的加载形式, 即需要时才读取. 这样, 当我们不需要关联数据的时候, Yii是不会帮我们去读取的, 大大加快了反应的速度. 但是也有一些时候, 我们是需要关联数据的, 比如说读取文章的时候, 我们是需要文章所属的分类的, 如果使用LazyLoad的形式, 就要有多少条, 查询多少次, 效率非常低下, 这时就需要EagerLoad了, 即一次把关联表的数据全部读出. 比如:
    
    $articles = Article::model()->with('category')->findAll();
    使用with将关联表的数据一次全部读出. 关联表的设置在
    
    Model
    
    里的relation里设置. 比如:
    
    publicfunction relations() {        returnarray(              'category' => array(self::BELONGS_TO, 'Category', 'categoryId'),         ); }
    ————————————————————————————————————————————————————
    YII AR的findAll结果集转换成json数据格式
    从1.0.2版本开始CActiveRecord已经支持JSON编码了。只要用CJSON::encode($models)就可以得到你想要的结果了。参见:http://code.google.com/p/yii/issues/detail?id=104&can=1&q=json
    
    .
    $list
     = Game::model()->findAll();
    $json
     = CJSON::encode($list);
    .
     yii 用findAll获取的数据对像转换成数组
    [php] view plaincopyprint?
    $model->album = 2;//设置默认选中值  
    //print_r(Album::model()->findAll());  
    echo CHtml::activeDropDownList($model, 'album', CHtml::listData(Album::model()->findAll(), 'id', 'title'), NULL, '2');
    ——————————————————————————————————————————————————
    Yii查看调试信息里的SQL语句  
    Yii的参数配置里面可以设置调试信息(不仅包括SQL语句),在/yiiroot/protected/config/main.php中配置:
    'log'=>array(
                'class'=>'CLogRouter',
                'routes'=>array(
                    array(
                        'class'=>'CFileLogRoute',
                        'levels'=>'error, warning',
                    ),
                    // uncomment the following to show log messages on web pages
                    ///*
                    array(
                        'class' => 'CWebLogRoute',
                        'levels' => 'profile,trace',
                    ),
                    array(
                        'class' => 'CProfileLogRoute',
                        'levels' => 'profile',
                    ),
                    //*/
                ),
            ),
    ————————————————————————————————————————————————————————————
    CDbCriteria 详细便用说明
    第一部分:
    yii的CDbCriteria已经更强大了,但是也有时候不能满足我们,这个时候我们必须要自行写SQL语句,下面这种方法,非常不错,以获取fe_category表数据为例:
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //
     获取所有分类
    public function getAllCategoryName()
     {
        $allCategoryName =
     Category::model()->findAll();
        return CHtml::listData($allCategoryName,'id','name');
                        
        //下面是用来验证的代码
        //$returnData
     = CHtml::listData($allCategoryName,'id','name');
        //print_r($returnData);
        //exit;
    }
    等价于:
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //
     获取所有分类
    public function getAllCategoryName()
     {
        $allCategoryName = 
     Category::model()->findAllBySql("SELECT
     * FROM  `fe_category` ");
        return CHtml::listData($allCategoryName,'id','name');
                    
        //下面是用来验证的代码
        //$returnData
     = CHtml::listData($allCategoryName,'id','name');
        //print_r($returnData);
        //exit;
    }
    
    第二部分:
    Yii的Active Recorder包装了很多。
    特别是把SQL中 把where,order,limit,IN/not IN,like等常用短句都包含进CDbCriteria这个类中去
    这样整个代码会比较规范,一目了然。
       $criteria =newCDbCriteria; 
    
     $criteria->addCondition("id=1"); //查询条件,即where id =1  
    
       $criteria->addInCondition('id',
     array(1,2,3,4,5));//代表where id IN (1,23,,4,5,);    
    
     $criteria->addNotInCondition('id',array(1,2,3,4,5));//与上面正好相法,是NOT
     IN   
    
      $criteria->addCondition('id=1','OR');//这是OR条件,多个条件的时候,该条件是OR而非AND    $criteria->addSearchCondition('name','分类');//搜索条件,其实代表了。。where
     name like '%分类%'     $criteria->addBetweenCondition('id', 1, 4);//between1 and 4        
    
    $criteria->compare('id',1);   //这个方法比较特殊,他会根据你的参数自动处理成addCondition或者addInCondition,                                    //即如果第二个参数是数组就会调用addInCondition
             $criteria->addCondition("id = :id");    $criteria->params[':id']=1;     $criteria->select = 'id,parentid,name';//代表了要查询的字段,默认select='*';     $criteria->join = 'xxx'; //连接表    $criteria->with = 'xxx';//调用relations      $criteria->limit =10;   //取1条数据,如果小于0,则不作处理
         $criteria->offset =1;   //两条合并起来,则表示 limit 10 offset1,或者代表了。limit 1,10     $criteria->order = 'xxx DESC,XXX ASC' ;//排序条件    $criteria->group = 'group 条件';    $criteria->having = 'having 条件 ';    $criteria->distinct = FALSE;//是否唯一查询
    
    ——————————————————————————————————————————
    
    
    AR模式中的增删查改操作示例如下:
    一、查询数据集合
    1、$admin=Admin::model()->findAll($condition,$params);
         该方法是根据一个条件查询一个集合,如:  
         findAll("username=:name",array(":name"=>$username));     
    2、$admin=Admin::model()->findAllByPk($postIDs,$condition,$params); 
         findAllByPk($id,"name like ':name' and age=:age",array(':name'=>$name,'age'=>$age));   
         该方法是根据主键查询一个集合,可以使用多个主键,如:  
         findAllByPk(array(1,2));    
    3、$admin=Admin::model()->findAllByAttributes($attributes,$condition,$params); 
         该方法是根据条件查询一个集合,可以是多个条件,把条件放到数组里面,如:  
         findAllByAttributes(array('username'=>'admin')); 
    4、$admin=Admin::model()->findAllBySql($sql,$params); 
        该方法是根据SQL语句查询一个数组,如: 
        findAllBySql("select *from admin whereusername=:name",array(':name'=>'admin')); 
    
    二、查询对像的方法  
    
    1、$admin=Admin::model()->findByPk($postID,$condition,$params); 
        根据主键查询出一个对象,如:findByPk(1);  
     2、$row=Admin::model()->find($condition,$params); 
        根据一个条件查询出一组数据,可能是多个,但是他只返回第一行数据,如: 
        find('username=:name',array(':name'=>'admin')); 
     3、$admin=Admin::model()->findByAttributes($attributes,$condition,$params); 
        该方法是根据条件查询一组数据,可以是多个条件,把条件放到数组里面,他查询的也是第一条数据,如: 
        findByAttributes(array('username'=>'admin')); 
     4、$admin=Admin::model()->findBySql($sql,$params); 
          该方法是根据SQL语句查询一组数据,他查询的也是第一条数据,如:  
          findBySql("select *from admin whereusername=:name",array(':name'=>'admin')); 
     5、拼一个获得SQL的方法,在根据find查询出一个对象  
         $criteria=new CDbCriteria;  
         $criteria->select='username'; // only select the 'title' column  
         $criteria->condition='username=:username'; 
         $criteria->params=array(':username=>'admin'); 
         $post=Post::model()->find($criteria); // $params isnot needed  
     
    三、查询个数,判断查询是否有结果  
    
    1、$n=Post::model()->count($condition,$params); 
         该方法是根据一个条件查询一个集合有多少条记录,返回一个int型数字,count("username=:name",array(":name"=>$username));    
     2、$n=Post::model()->countBySql($sql,$params); 
          该方法是根据SQL语句查询一个集合有多少条记录,返回一个int型数字,如 
          countBySql("select *from admin whereusername=:name",array(':name'=>'admin')); 
     3、$exists=Post::model()->exists($condition,$params); 
          该方法是根据一个条件查询查询得到的数组有没有数据,如果有数据返回一个true,否则没有找到 
    
    四、添加的方法  
          $admin=new Admin;        
          $admin->username=$username; 
          $admin->password=$password; 
         if($admin->save()>0){ 
             echo "添加成功";  
         }else{  
             echo "添加失败";  
        }  
    
    五、修改的方法  
    1、Post::model()->updateAll($attributes,$condition,$params); 
     $count=Admin::model()->updateAll(array('username'=>'11111','password'=>'11111'),'password=:pass',array(':pass'=>'1111a1')); 
      2、Post::model()->updateByPk($pk,$attributes,$condition,$params); 
     $count =Admin::model()->updateByPk(1,array('username'=>'admin','password'=>'admin')); 
     $count=Admin::model()->updateByPk(array(1,2),array('username'=>'admin','password'=>'admin'),'username=:name',array(':name'=>'admin')); 
      $pk代表主键,可以是一个也可以是一个集合,$attributes代表是要修改的字段的集合$condition代表条件$params传入的值 
     3、Post::model()->updateCounters($counters,$condition,$params); 
       $count=Admin::model()->updateCounters(array('status'=>1),'username=:name',array(':name'=>'admin')); 
       array('status'=>1)代表数据库中的admin表根据条件username='admin',查询出的所有结果status字段都自加1 
     
    六、删除的方法  
    1、Post::model()->deleteAll($condition,$params); 
        $count = Admin::model()->deleteAll('username=:nameandpassword=:pass',array(':name'=>'admin',':pass'=>'admin')); 
        $id=1,2,3  
         deleteAll('id in(".$id.")');删除id为这些的数据 
    
     2、Post::model()->deleteByPk($pk,$condition,$params); 
          $count = Admin::model()->deleteByPk(1); 
          $count =Admin::model()->deleteByPk(array(1,2),'username=:name',array(':name'=>'admin')); 
    
    ——————————————————————————————————————————————————————————————————
    
    
    yii的增删改查  
    
    
    增:
    1 第一种
    $post=new Post;
    $post->title='sample post';
    $post->content='content for the sample post';
    $post->createTime=time();/$post->createTime=new CDbexpression_r('NOW()');
    $post->save();
     
    $user_field_data= new user_field_data;
    $user_field_data->flag=0;
    $user_field_data->user_id=$profile->id;
    $user_field_data->field_id=$_POST['emailhiden'];
    $user_field_data->value1=$_POST['email'];
    $user_field_data->save();
    注当一个表存储4次的时候,需要创建4个handle new4次
    2 第二种
    
    存储后我们需要找到这条记录的流水id 这样做 $profile = new profile; $profile->id;
    
    3 第三种
    
    用于更加安全的方法,来绑定变量类型 这样可以在同一个表中存储两个记录
    
    $sql="insert into user_field_data(user_id,field_id,flag,value1) values(:user_id,:field_id,:flag,:value1);";
    $command=user_field_data::model()->dbConnection->createCommand($sql);
    $command->bindParam(":user_id",$profile->id,PDO::PARAM_INT);
    $command->bindParam(":field_id",$_POST['firstnamehiden'],PDO::PARAM_INT);
    $command->bindParam(":flag",$tmpflag,PDO::PARAM_INT);
    $command->bindParam(":value1",$_POST['firstname'],PDO::PARAM_STR);
    $command->execute();
    $command->bindParam(":user_id",$profile->id,PDO::PARAM_INT);
    $command->bindParam(":field_id",$_POST['emailhiden'],PDO::PARAM_INT);
    $command->bindParam(":flag",$tmpflag,PDO::PARAM_INT);
    $command->bindParam(":value1",$_POST['email'],PDO::PARAM_STR);
    $rowchange = $command->execute();
     
    if( $rowchange != 0){ 修改成功 }// 用来判断
    //注:update delete都可以用这个方法
    $sql="delete from profile where id=:id";
    $command=profile::model()->dbConnection->createCommand($sql);
    $command->bindParam(":id",$userid,PDO::PARAM_INT);
    $this->rowflag=$command->execute();
     
    $sql="update profile set pass=:pass,role=:role where id=:id";
    $command=profile::model()->dbConnection->createCommand($sql);
    $command->bindParam(":pass",$password,PDO::PARAM_STR);
    $command->bindParam(":role",$role,PDO::PARAM_INT);
    $command->bindParam(":id",$userid,PDO::PARAM_INT);
    $this->rowflag=$command->execute();
    // 同理变更updateAll()模式
    $sql="update user_field_data set flag = :flag where user_id= :user_id and field_id= :field_id ";
    原始sql语句
    $criteria = new CDbCriteria;
    $criteria->condition = 'user_id = :user_id and field_id= :field_id';
    $criteria->params = array(':user_id' => $userid,':field_id' => $fieldid);
    $arrupdate = array('flag' => $flag);
    if(user_field_data::model()->updateAll($arrupdate,$criteria) != 0)
    {
    更新成功后。。。
    }
    4 第四种
    
    更新和存储应用同一个handle 流程:先查询记录是否存在,若存在就更新,不存在就新创建
    注:1. 第一次查询的变量,要跟save()前的变量一致。2. 存储时候需要再次 new一下库对象
    
    $user_field_data = user_field_data::model()->findByAttributes(
    $attributes = array('user_id' => Yii::app()->user->user_id, 'field_id' => $key));
    if ($user_field_data !== null)
    {
        $user_field_data->value1 = $value;
        $user_field_data->save();
    }
    else
    {
        $user_field_data = new user_field_data;
        $user_field_data->user_id = Yii::app()->user->user_id;
        $user_field_data->field_id = $key;
        $user_field_data->value1 = $value;
        $user_field_data->save();
    }
    
    删:
    $post=Post::model()->findByPk(10); // assuming there is a post whose ID is 10
    $post->delete(); // delete the row from the database table
    // delete the rows matching the specified condition
    Post::model()->deleteAll($condition,$params);
    // delete the rows matching the specified condition and primary key(s)
    Post::model()->deleteByPk($pk,$condition,$params);
    
    改:
    例子:
    $post=Post::model()->findByPk(10);
    $post->title=’new post title’;
    $post->save(); // save the change to database
    
    // update the rows matching the specified condition
    Post::model()->updateAll($attributes,$condition,$params);
    例子:或者参考上面例子
    $c=new CDbCriteria;
    $c->condition=’something=1′;
    $c->limit=10;
    $a=array(‘name’=>’NewName’);
    Post::model()->updateAll($a, $c);
    
    // update the rows matching the specified condition and primary key(s)
    Post::model()->updateByPk($pk,$attributes,$condition,$params);
    例子
    $profile = profile::model()->updateByPk(
    Yii::app()->user->user_id,
    $attributes = array(‘pass’ => md5($_POST['password']), ‘role’ => 1));
    
    // update counter columns in the rows satisfying the specified conditions
    Post::model()->updateCounters($counters,$condition,$params);
    
    查:
    注:当项目没查找到整个对象会为空需要这样判定
    if($rows !== null) 当对象不为空
    {
        return true;
    }else{
        return false;
    }
    SELECT,读表时候用到
    find()
    第一种find()
    // find the first row satisfying the specified condition
    $post=Post::model()->find($condition,$params);
    // 条件查询
    $post = Post::model()->find('post_id=:post_id AND status=:status',
    array(
      ':post_id'=>8,
      ':status'=>'active',
    ));
    同样的语句,用另种方式表示
    $criteria=new CDbCriteria;
    $criteria->select='title';  // only select the 'title' column
    $criteria->condition='postID=:postID';
    $criteria->params=array(':postID'=>10);
    $post=Post::model()->find($criteria); // $params is not needed
    第二种find()
    $post=Post::model()->find(array(
        'select'=>'title',
        'condition'=>'postID=:postID',
        'params'=>array(':postID'=>10),
    ));
    // find the row with the specified primary key
    $post=Post::model()->findByPk($postID,$condition,$params);
    
    findByAttributes()
    $post=Post::model()->findByAttributes($attributes,$condition,$params);
    第一种findByAttributes()
    $checkuser = user_field_data::model()->findByAttributes(
    第二种findByAttributes()
    
    _________________________________________________________________________________________________
    
    yii增删改查与sql语句原型的比较:
    
    查找:
    select * from UserRelation where userid = $userid;
    $userRelation = UserRelation::model()->find("userId='{$usersId}'");
    
    ————————————————————————————————————————————————
    
    
    数据模型搜索方法:
    [html] view plaincopyprint? 
    public function search()  
    {  
        // Warning: Please modify the following code to remove attributes that  
        // should not be searched.  
      
        $criteria=new CDbCriteria;  
      
        $criteria->compare('id',$this->id);  
        $criteria->compare('title',$this->title,true);                //支持模糊查找  
        $criteria->compare('content',$this->content,true);            //支持模糊查找  
        $criteria->compare('type',$this->type);  
        $criteria->compare('user',$this->user,true);              //支持模糊查找  
        $criteria->compare('status',$this->status);  
        $criteria->compare('create_data',$this->create_data,true);    //支持模糊查找  
      
        return new CActiveDataProvider($this, array(  
            'criteria'=>$criteria,  
            'pagination'=>array(  
                'pageSize'=>50,  
            ),  
        ));  
    }  
    
    定义比较运算
    [html] view plaincopyprint? 
    $criteria->compare('create_time','<='.$this->endtime),//创建早间小于等于指定时间  
    定义要查找的字段
    [html] view plaincopyprint? 
    //查找的结果   
    $criteria->select = 'id,title,content,author,status,createtime',  
    //也可以以下一种方式定义  
    $criteria->select = array('id','title','content','author','status','createtime'),  
    
    定义填加查找条件
    [html] view plaincopyprint? 
    //定义条件    
    $criteria->select =  'status=1',  
    //添加匹配  
    $criteria->compare('title',$this->title,true),  
    //添加条件 $condition可以是数组,也可以是字符串,and可以省略  
    $criteria->addCondition($condition,'and'),  
    //添加IN条件 $column为字段名  
    $criteria->addInCondition(string $column, array $values, string $operator='AND')  
    //添加notin条件  
    $criteria->addNotInCondition(string $column, array $values, string $operator='AND')  
    //添加like条件  
    $criteria->addSearchCondition(string $column, string $keyword),  
    //添加Between条件  
    $criteria->addBetweenCondition(string $column, string $valueStart, string $valueEnd, string $operator='AND'),  
    JOIN连表查询
    [html] view plaincopyprint? 
    $criteria->join = 'LEFT JOIN users ON users.id=authorID',  
    
    order查询结果排序
    [html] view plaincopyprint? 
    $criteria->order = 'createtime DESC',  
    
    group结果分组
    [html] view plaincopyprint? 
    $criteria->group =  'projectID, teamID',  
    
    having筛选分组结果分组数量
    [html] view plaincopyprint? 
    $criteria->having =  'SUM(revenue)<50000',  
    
    
    
    资讯显示
    
    在我们的资讯应用中,一篇资讯可以显示在一个列表中,也可以单独显示。前者的实现通过 index 操作,而后者是通过 view 操作。 在这一节中,我们将自定义这两个操作来适合我们一开始的需求。
    
    自定义 view 操作
    view 操作是通过 PostController 中的 actionView() 方法实现的。它的显示是通过 view 视图文件 /wwwroot/cms/protected/views/post/view.php 生成的。
    
    下面是在 PostController 中实现 view 操作的具体代码:
    
    public function actionView()
    {
        $post=$this->loadModel();
        $this->render('view',array(
            'model'=>$post,
        ));
    }
     
    private $_model;
     
    public function loadModel()
    {
        if($this->_model===null)
        {
            if(isset($_GET['id']))
            {
                if(Yii::app()->user->isGuest)
                    $condition='status='.Post::STATUS_PUBLISHED
                        .' OR status='.Post::STATUS_ARCHIVED;
                else
                    $condition='';
                $this->_model=Post::model()->findByPk($_GET['id'], $condition);
            }
            if($this->_model===null)
                throw new CHttpException(404,'The requested page does not exist.');
        }
        return $this->_model;
    }
    我们的修改主要是在 loadModel() 方法上进行的。在这个方法中,我们通过 id GET参数查询了 Post 表。如果日志未找到或者没有发布,也未存档(当用户为游客(guest)时),我们将抛出一个 404 HTTP 错误。否则,资讯对象将返回给 actionView() ,actionView() 又会把资讯对象传递给视图脚本用于显示。
    
    
    一、查询数据集合1、$admin=Admin::model()->findAll($condition,$params);该方法是根据一个条件查询一个集合,如: findAll('username=:name',array(':name'=>$username)); 2、$admin=Admin::model()->findAllByPk($postIDs,$condition,$params);
    findAllByPk($id,'name like ':name' and age=:age',array(':name'=>$name,'age'=>$age)); 该方法是根据主键查询一个集合,可以使用多个主键,如: findAllByPk(array(1,2)); 3、$admin=Admin::model()->findAllByAttributes($attributes,$condition,$params); 该方法是根据条件查询一个集合,可以是多个条件,把条件放到数组里面,如: findAllByAttributes(array('username'=>'admin')); 4、$admin=Admin::model()->findAllBySql($sql,$params); 该方法是根据SQL语句查询一个数组,如: findAllBySql('select *from admin whereusername=:name',array(':name'=>'admin')); 二、查询对像的方法 1、$admin=Admin::model()->findByPk($postID,$condition,$params); 根据主键查询出一个对象,如:findByPk(1); 2、$row=Admin::model()->find($condition,$params); 根据一个条件查询出一组数据,可能是多个,但是他只返回第一行数据,如: find('username=:name',array(':name'=>'admin')); 3、$admin=Admin::model()->findByAttributes($attributes,$condition,$params); 该方法是根据条件查询一组数据,可以是多个条件,把条件放到数组里面,他查询的也是第一条数据,如: findByAttributes(array('username'=>'admin')); 4、$admin=Admin::model()->findBySql($sql,$params); 该方法是根据SQL语句查询一组数据,他查询的也是第一条数据,如: findBySql('select *from admin whereusername=:name',array(':name'=>'admin')); 5、拼一个获得SQL的方法,在根据find查询出一个对象 $criteria=new CDbCriteria; 
    $criteria->select='username'; // only select the 'title' column 
    $criteria->condition='username=:username';
    $criteria->params=array(':username=>'admin');
    $post=Post::model()->find($criteria); // $params isnot needed 三、查询个数,判断查询是否有结果 1、$n=Post::model()->count($condition,$params); 该方法是根据一个条件查询一个集合有多少条记录,返回一个int型数字,如 count('username=:name',array(':name'=>$username)); 2、$n=Post::model()->countBySql($sql,$params); 该方法是根据SQL语句查询一个集合有多少条记录,返回一个int型数字,如 countBySql('select *from admin whereusername=:name',array(':name'=>'admin')); 3、$exists=Post::model()->exists($condition,$params); 该方法是根据一个条件查询查询得到的数组有没有数据,如果有数据返回一个true,否则没有找到 四、添加的方法 $admin=newAdmin; 
    $admin->username=$username;
    $admin->password=$password;
    if($admin->save()>0){
    echo '添加成功'; 
    }else{ 
    echo '添加失败'; 
    } 五、修改的方法 1、Post::model()->updateAll($attributes,$condition,$params);
    $count =Admin::model()->updateAll(array('username'=>'11111','password'=>'11111'),'password=:pass',array(':pass'=>'1111a1'));
    if($count>0){ 
    echo '修改成功'; 
    }else{ 
    echo '修改失败'; 
    } 2、Post::model()->updateByPk($pk,$attributes,$condition,$params);
    $count =Admin::model()->updateByPk(1,array('username'=>'admin','password'=>'admin'));
    $count =Admin::model()->updateByPk(array(1,2),array('username'=>'admin','password'=>'admin'),'username=:name',array(':name'=>'admin'));
    if($count>0){ 
    echo '修改成功'; 
    }else{ 
    echo '修改失败'; 
    } $pk代表主键,可以是一个也可以是一个集合,$attributes代表是要修改的字段的集合,$condition代表条件,$params传入的值 3、Post::model()->updateCounters($counters,$condition,$params);
    $count=Admin::model()->updateCounters(array('status'=>1),'username=:name',array(':name'=>'admin'));
    if($count>0){ 
    echo '修改成功'; 
    }else{ 
    echo '修改失败'; 
    } array('status'=>1)代表数据库中的admin表根据条件username='admin',查询出的所有结果status字段都自加1 六、删除的方法 1、Post::model()->deleteAll($condition,$params);
    $count = Admin::model()->deleteAll('username=:nameandpassword=:pass',array(':name'=>'admin',':pass'=>'admin'));
    $id=1,2,3 
    deleteAll('id in('.$id.')');删除id为这些的数据
    if($count>0){ 
    echo '删除成功'; 
    }else{ 
    echo '删除失败'; 
    } 2、Post::model()->deleteByPk($pk,$condition,$params);
    $count = Admin::model()->deleteByPk(1);
    $count =Admin::model()->deleteByPk(array(1,2),'username=:name',array(':name'=>'admin'));
    if($count>0){ 
    echo '删除成功'; 
    }else{ 
    echo '删除失败'; 
    }
  • 相关阅读:
    linux在线安装jdk,tomcat,Nginx
    SpringAOP的实现方式
    Spring整合Mybatis
    基本sql语句
    解决No module named 'sklearn.cross_validation'
    虚拟机中安装redhat8操作系统
    【Linux命令】tcpdump抓包工具
    【Nodejs】Linux系统搭建Nodejs
    【SSL证书配置】tomcat实现SSL证书访问
    【SSL证书配置】腾讯云申请ssl证书,nginx+tomcat配置ssl证书
  • 原文地址:https://www.cnblogs.com/free3649/p/3714176.html
Copyright © 2011-2022 走看看