因?yàn)閯傞_始學(xué)習(xí)php 框架的時(shí)候使用的是CI沥匈,后來開始接觸 Yii的時(shí)候各種不熟悉,只能是各種百度缰儿,因?yàn)樽约河⒄Z很弱乖阵,花了不少時(shí)間预麸。如果英文不錯,可以直接看原文地址http://www.yiiframework.com/doc/guide/1.1/en/database.ar
一对蒲、對于一個(gè)Model News
有如下的4中查詢方法贡翘,返回對象或者對象數(shù)組:
$post=News::model()->find($condition,$params); // 通過指定的條件進(jìn)行查詢
$post=News::model()->findByPk($postID,$condition,$params); // 通過news表的primary key 進(jìn)行查詢
$post=News::model()->findByAttributes($attributes,$condition,$params); // 通過指定關(guān)鍵值繼續(xù)查詢
$post=News::model()->findBySql($sql,$params); // 通過sql語句進(jìn)行查詢
下面我們來看find()
方法:
比如我們要查詢nid
為5
的那條數(shù)據(jù)
$post=News::model()->find('nid=:newsID', array(':newsID'=>5));
條件$condition
就是我們sql
里的where
部分鸣驱,參數(shù)通過params
傳遞, 注意名字前面是加了 " :
"的。
在Yii
中我們還可以使用CDbCriteria
類來構(gòu)造查詢谈况,如果我們查詢nid
為5
的title
值碑韵,CdbCriteria
是這樣構(gòu)造的:
$criteria = new CDbCriteria;
$criteria->select='title'; // 只查詢出相應(yīng)的 title 字段缎脾,不要這句話講返回整條數(shù)據(jù)
$criteria->condition='nid=:newsID';
$criteria->params=array(':newsID'=>5);
$news = News::model()->find($criteria); // $params不是必須的
還有也可以寫成一下方式:
$news = News::model()->find(array( 'select'=>'title', 'condition'=>'nid=:newsID', 'params'=>array(':newsID'=>5),));
下面我們來看 findByAttributes()
方法:
News::model()->findByAttributes(array('title'=>'abc'));
參數(shù)就是一個(gè)鍵值對的數(shù)組遗菠。
還有其他的一些方法:
$admin=Admin::model()->findAll($condition,$params);
該方法是根據(jù)一個(gè)條件查詢一個(gè)集合,如: findAll("username=:name",array(":name"=>$username));
$admin=Admin::model()->findAllByPk($postIDs,$condition,$params);
findAllByPk($id,"name like ':name' and age=:age" ,array(':name'=>$name,'age'=>$age));
該方法是根據(jù)主鍵查詢一個(gè)集合豁遭,可以使用多個(gè)主鍵,如: findAllByPk(array(1,2));
$admin=Admin::model()->findAllByAttributes($attributes,$condition,$params);
該方法是根據(jù)條件查詢一個(gè)集合蓖谢,可以是多個(gè)條件,把條件放到數(shù)組里面闪幽,根據(jù)屬性來查詢,就想sql的where里的多個(gè)and
如:findAllByAttributes(array('username'=>'admin'));
SELECT * from one_table where username = 'admin' and password = '123456';
對應(yīng)的AR model查詢?nèi)?/strong>Admin::model()->findAllByAttributes(array('username'=>'admin', 'password'=>'123456'));
$admin=Admin::model()->findAllBySql($sql,$params);
該方法是根據(jù)SQL
語句查詢一個(gè)數(shù)組,如: findAllBySql("select *from admin where username=:name",array(':name'=>'admin'));
二溉知、查詢對像的方法
1级乍、$admin=Admin::model()->findByPk($postID,$condition,$params);
根據(jù)主鍵查詢出一個(gè)對象,如:findByPk(1);
2燕少、$row=Admin::model()->find($condition,$params);
根據(jù)一個(gè)條件查詢出一組數(shù)據(jù),可能是多個(gè),但是他只返回第一行數(shù)據(jù),如:
find('username=:name',array(':name'=>'admin'));
3材诽、$admin=Admin::model()->findByAttributes($attributes,$condition,$params);
該方法是根據(jù)條件查詢一組數(shù)據(jù),可以是多個(gè)條件建邓,把條件放到數(shù)組里面官边,他查詢的也是第一條數(shù)據(jù)外遇,如:
findByAttributes(array('username'=>'admin'));
4、$admin=Admin::model()->findBySql($sql,$params);
該方法是根據(jù)SQL語句查詢一組數(shù)據(jù),他查詢的也是第一條數(shù)據(jù)诡渴,如:
findBySql("select *from admin where username=:name",array(':name'=>'admin'));
5菲语、拼一個(gè)獲得SQL
的方法,在根據(jù)find查詢出一個(gè)對象
$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
三眼耀、查詢個(gè)數(shù)哮伟,判斷查詢是否有結(jié)果
1、$n=Post::model()->count($condition,$params);
該方法是根據(jù)一個(gè)條件查詢一個(gè)集合有多少條記錄澈吨,返回一個(gè)int
型數(shù)字,如
count("username=:name",array(":name"=>$username));
2、$n=Post::model()->countBySql($sql,$params);
該方法是根據(jù)SQL語句查詢一個(gè)集合有多少條記錄修赞,返回一個(gè)int
型數(shù)字,如
countBySql("select *from admin where username=:name",array(':name'=>'admin'));
3桑阶、$exists=Post::model()->exists($condition,$params);
該方法是根據(jù)一個(gè)條件查詢查詢得到的數(shù)組有沒有數(shù)據(jù),如果有數(shù)據(jù)返回一個(gè)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
代表主鍵,可以是一個(gè)也可以是一個(gè)集合值朋,$attributes
代表是要修改的字段的集合巩搏,$condition
代表?xiàng)l件,$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)
代表數(shù)據(jù)庫中的admin
表根據(jù)條件username='admin'
丈甸,查詢出的所有結(jié)果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為這些的數(shù)據(jù)
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 "刪除失敗"; }
好啦,就到這到這里吧鸿吆。有什么遺落或者寫錯的地方還請大家支出修正。謝謝蕉毯。