Yii框架AR的使用

因?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()
方法:
比如我們要查詢nid5的那條數(shù)據(jù)
$post=News::model()->find('nid=:newsID', array(':newsID'=>5));
條件$condition 就是我們sql里的where
部分鸣驱,參數(shù)通過params
傳遞, 注意名字前面是加了 " : "的。
Yii中我們還可以使用CDbCriteria
類來構(gòu)造查詢谈况,如果我們查詢nid5title值碑韵,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 "刪除失敗"; } 

好啦,就到這到這里吧鸿吆。有什么遺落或者寫錯的地方還請大家支出修正。謝謝蕉毯。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末思犁,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子棉磨,更是在濱河造成了極大的恐慌学辱,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件馅扣,死亡現(xiàn)場離奇詭異着降,居然都是意外死亡任洞,警方通過查閱死者的電腦和手機(jī)发侵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盅弛,“玉大人叔锐,你說我怎么就攤上這事√趾校” “怎么了步责?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵禀苦,是天一觀的道長振乏。 經(jīng)常有香客問我秉扑,道長,這世上最難降的妖魔是什么赋咽? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任脓匿,我火速辦了婚禮宦赠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘毡琉。我一直安慰自己,他們只是感情好桅滋,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布丐谋。 她就那樣靜靜地躺著煌珊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪定庵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天猪落,我揣著相機(jī)與錄音许布,去河邊找鬼绎晃。 笑死杂曲,一個(gè)胖子當(dāng)著我的面吹牛袁余,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播棚饵,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼噪漾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了欣硼?” 一聲冷哼從身側(cè)響起恶阴,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤冯事,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后昵仅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡荚虚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年籍茧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了寞冯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吮龄。...
    茶點(diǎn)故事閱讀 39,754評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡咆疗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出尝抖,到底是詐尸還是另有隱情,我是刑警寧澤昧辽,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布搅荞,位于F島的核電站,受9級特大地震影響咕痛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜塞栅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一构蹬、第九天 我趴在偏房一處隱蔽的房頂上張望悔据。 院中可真熱鬧,春花似錦科汗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽早歇。三九已至,卻和暖如春晨另,著一層夾襖步出監(jiān)牢的瞬間谱姓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工路翻, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人亿驾。 一個(gè)月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像账嚎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子疼邀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評論 2 354

推薦閱讀更多精彩內(nèi)容