标签:des cWeb style blog class code
使用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 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 "添加成功"; "\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 #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 ‘删除失败‘; }
yii中数据的"增删改查"相关工作!(此文比较乱,需细看),布布扣,bubuko.com
标签:des cWeb style blog class code
原文地址:http://www.cnblogs.com/free3649/p/3714176.html