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
使用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.数据的”增删改查“通过控制器来完成。
从表单获得数据,增加数据
直接使用$_POST[]数组获得数据,提交的方式在视图里自动完成的。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, )); }
$model->attributes 会自动调用setAttributes()方法将表单里的值赋值给相应的变量(变量名和字段名相同)
=======================================
获得数据表数据
使用CActiveDataProvider类来获得数据表的数据,传入AR的类名。public function actionIndex() { $dataProvider=new CActiveDataProvider('Post'); $this->render('index',array( 'dataProvider'=>$dataProvider, )); }
=============================================================
查找数据
Post::model()->findbyPk() 是有数据模型提供的查找方法。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(), )); }
URL:?r=post/view&id=1
================================================================
更新数据
URL:?r=post/update&id=1public 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, )); }
==================================================
删除数据
Yii的Active Recorder包装了很多。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
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,3deleteAll('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操作
|字号 订阅
特别是把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);
find('username=:name',array(':name'=>'admin'));
findByAttributes(array('username'=>'admin'));
4、$admin=Admin::model()->findBySql($sql,$params);
findBySql("select *from admin whereusername=:name",array(':name'=>'admin'));
$criteria=new CDbCriteria;
$criteria->select='username';
$criteria->condition='username=:username';
$criteria->params=array(':username=>'admin');
$post=Post::model()->find($criteria); // $params isnot needed
三、查询个数,判断查询是否有结果
1、$n=Post::model()->count($condition,$params);
count("username=:name",array(":name"=>$username));
countBySql("select *from admin whereusername=:name",array(':name'=>'admin'));
四、添加的方法
$admin=new Admin;
$admin->username=$username;
$admin->password=$password;
if($admin->save()>0){
}else{
}
五、修改的方法
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(array(1,2),array('username'=>'admin','password'=>'admin'),'username=:name',array(':name'=>'admin'));
$pk代表主键,可以是一个也可以是一个集合,$attributes代表是要修改的字段的集合,$condition代表条件,$params传入的值
array('status'=>1)代表 数据库 中的admin表根据条件username='admin',查询出的所有结果status字段都自加1
六、删除的方法
1、Post::model()->deleteAll($condition,$params);
$count = Admin::model()->deleteByPk(1);
$count =Admin::model()->deleteByPk(array(1,2),'username=:name',array(':name'=>'admin'));
——————————————————————————————————————————————————————————————————
yii的增删改查
_________________________________________________________________________________________________
yii增删改查与sql语句原型的比较:
查找:
select * from UserRelation where userid = $userid;
$userRelation = UserRelation::model()->find("userId='{$usersId}'");
————————————————————————————————————————————————
数据模型搜索方法:
- 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,
- ),
- ));
- }
- $criteria->compare('create_time','<='.$this->endtime),//创建早间小于等于指定时间
定义要查找的字段
- //查找的结果
- $criteria->select = 'id,title,content,author,status,createtime',
- //也可以以下一种方式定义
- $criteria->select = array('id','title','content','author','status','createtime'),
定义填加查找条件
- //定义条件
- $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连表查询
- $criteria->join = 'LEFT JOIN users ON users.id=authorID',
order查询结果排序
- $criteria->order = 'createtime DESC',
group结果分组
- $criteria->group = 'projectID, teamID',
having筛选分组结果分组数量
- $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 '删除失败';
}