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传入的值


 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很好很强大,但刚开始不知道怎么使用

  如果英文不错,可以直接看原文地址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 "添加成功"; "\rR0V! 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'   六、删除的方法 b\H ! \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

 

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'),          );  }
————————————————————————————————————————————————————

从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获取的数据对像转换成数组

  1. $model->album = 2;//设置默认选中值  
  2. //print_r(Album::model()->findAll());  
  3. 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 plain copy print ?
  1. public function search()  
  2. {  
  3.     // Warning: Please modify the following code to remove attributes that  
  4.     // should not be searched.  
  5.   
  6.     $criteria=new CDbCriteria;  
  7.   
  8.     $criteria->compare('id',$this->id);  
  9.     $criteria->compare('title',$this->title,true);                //支持模糊查找  
  10.     $criteria->compare('content',$this->content,true);            //支持模糊查找  
  11.     $criteria->compare('type',$this->type);  
  12.     $criteria->compare('user',$this->user,true);              //支持模糊查找  
  13.     $criteria->compare('status',$this->status);  
  14.     $criteria->compare('create_data',$this->create_data,true);    //支持模糊查找  
  15.   
  16.     return new CActiveDataProvider($this, array(  
  17.         'criteria'=>$criteria,  
  18.         'pagination'=>array(  
  19.             'pageSize'=>50,  
  20.         ),  
  21.     ));  
  22. }  


定义比较运算
[html]  view plain copy print ?
  1. $criteria->compare('create_time','<='.$this->endtime),//创建早间小于等于指定时间  

定义要查找的字段

[html]  view plain copy print ?
  1. //查找的结果   
  2. $criteria->select = 'id,title,content,author,status,createtime',  
  3. //也可以以下一种方式定义  
  4. $criteria->select = array('id','title','content','author','status','createtime'),  

定义填加查找条件

[html]  view plain copy print ?
  1. //定义条件    
  2. $criteria->select =  'status=1',  
  3. //添加匹配  
  4. $criteria->compare('title',$this->title,true),  
  5. //添加条件 $condition可以是数组,也可以是字符串,and可以省略  
  6. $criteria->addCondition($condition,'and'),  
  7. //添加IN条件 $column为字段名  
  8. $criteria->addInCondition(string $column, array $values, string $operator='AND')  
  9. //添加notin条件  
  10. $criteria->addNotInCondition(string $column, array $values, string $operator='AND')  
  11. //添加like条件  
  12. $criteria->addSearchCondition(string $column, string $keyword),  
  13. //添加Between条件  
  14. $criteria->addBetweenCondition(string $column, string $valueStart, string $valueEnd, string $operator='AND'),  

JOIN连表查询

[html]  view plain copy print ?
  1. $criteria->join = 'LEFT JOIN users ON users.id=authorID',  

order查询结果排序

[html]  view plain copy print ?
  1. $criteria->order = 'createtime DESC',  

group结果分组

[html]  view plain copy print ?
  1. $criteria->group =  'projectID, teamID',  

having筛选分组结果分组数量

[html]  view plain copy print ?
  1. $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 '删除失败'; 
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值