使用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‘=>‘[email protected]‘,));删除 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
`[email protected] 0:G&v
该方法是根据一个条件查询一个集合有多少条记录,返回一个int型数字,如 [email protected]?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 [email protected] *
$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为这些的数据 [email protected]<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
#Php1、$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