日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

YII框架分析筆記4:ar模型和db

 朱啟發(fā) 2014-11-05

YII中實(shí)現(xiàn)兩種類型的模型,分別是表單模型和活動(dòng)記錄。在持久化數(shù)據(jù)方面,YII只實(shí)現(xiàn)了活動(dòng)記錄,對(duì)于復(fù)雜的數(shù)據(jù)關(guān)系可以用框架提供的DAO來(lái)自己寫model,對(duì)應(yīng)集成doctrine這樣的ORM還沒有仔細(xì)研究過(guò)。

ar模型
框架中的model是CModel子類,CModel主要是一些驗(yàn)證與錯(cuò)誤處理,并實(shí)現(xiàn)迭代器和數(shù)組訪問接口,活動(dòng)記錄模型CActiveRecord是AR模型的基類。

每個(gè)AR類代表一個(gè)單獨(dú)的數(shù)據(jù)表,一個(gè)AR實(shí)例則代表那個(gè)表中的一行。AR是一種對(duì)象關(guān)系映射(ORM)的設(shè)計(jì)模式,它負(fù)責(zé)數(shù)據(jù)持久化. 封裝了數(shù)據(jù)庫(kù)CURD操作,同時(shí)它是一種領(lǐng)域模型(Domain Model), 封裝了部分業(yè)務(wù)邏輯。一個(gè)AR類中包括了表結(jié)構(gòu)(Table Schema),約束以及 CURD
實(shí)例化model有兩種方法,直接new一個(gè)新的實(shí)例,或者用靜態(tài)方法mode(),后者與前者的區(qū)別是略過(guò)構(gòu)造函數(shù)執(zhí)行的代碼(主要是避免元數(shù)據(jù)的多次獲?。渺o態(tài)方法mode()創(chuàng)建ar對(duì)象經(jīng)過(guò)一下步驟:
  1. //$model::model($class)  
  2. $model=self::$_models[$className]=new $className(null);//創(chuàng)建一個(gè)mode實(shí)例   
  3. new CActiveRecordMetaData($model)//創(chuàng)建元數(shù)據(jù)類  
  4. //1、獲取表模式實(shí)例  
  5. $model->getDbConnection() //獲取數(shù)據(jù)庫(kù)連接  
  6. ->getSchema()//獲取數(shù)據(jù)庫(kù)schema  
  7. ->getTable($tableName)//獲取表shema  
  8. ->loadTable()//獲取表對(duì)象  
  9. ->findColumns()//獲取表中列對(duì)象以及其中的約束  
  10. ->findConstraints()//獲取表約束(代碼實(shí)際上是外鍵關(guān)系)  
  11. //2、主鍵配置  
  12. //3、添加關(guān)系(關(guān)系包括BELONGS_TO、HAS_ONE、HAS_MANY、MANY_MANY、STAT)  
  13. $model->attachBehaviors($model->behaviors());//添加行為  
上面流程下來(lái)會(huì)遇到一個(gè)問題,每一次創(chuàng)建model都會(huì)執(zhí)行"SHOW COLUMNS FROM $tableName"和"SHOW CREATE TABLE $tableName"的查詢,在高并發(fā)下會(huì)影響性能??梢栽谥髋渲梦募械臄?shù)據(jù)庫(kù)配置中添加schemaCachingDuration和schemaCacheID的配置來(lái)緩存數(shù)據(jù)庫(kù)schema,前者是設(shè)置緩存的時(shí)間,后者是緩存組件的id,但緩存帶來(lái)的問題是修改數(shù)據(jù)庫(kù)中表結(jié)構(gòu)不能立即生效,所以在生產(chǎn)環(huán)境下寫一個(gè)刷新緩存的腳本是又必要的。

DAO
ar模型帶來(lái)的好處是將開發(fā)中SQL語(yǔ)句的編寫減到最小,ar模型既封裝了數(shù)據(jù)庫(kù)記錄的狀態(tài)和持久化到數(shù)據(jù)庫(kù)的訪問方法,也封裝了業(yè)務(wù)邏輯,這在關(guān)系不是很復(fù)雜的應(yīng)用中帶來(lái)的好處顯而易見,但如果數(shù)據(jù)庫(kù)關(guān)系復(fù)雜,業(yè)務(wù)邏輯復(fù)雜,有必要將對(duì)數(shù)據(jù)的操作單獨(dú)提出來(lái),YII中的DAO就是將業(yè)務(wù)邏輯和數(shù)據(jù)交換分開,也降低了業(yè)務(wù)和數(shù)據(jù)庫(kù)的耦合性。
YII中DAO基于PDO,統(tǒng)一的接口可以訪問不同的數(shù)據(jù)庫(kù)管理系統(tǒng)。在框架中CDbConnection、CDbCommand、CdbDataReader、CDbTransaction類分別管了數(shù)據(jù)量的連接、命令、讀取和事務(wù)。

YII還對(duì)數(shù)據(jù)庫(kù)的schema進(jìn)行映射,一個(gè)數(shù)據(jù)庫(kù)是對(duì)應(yīng)一個(gè)對(duì)象,一個(gè)表對(duì)應(yīng)一個(gè)對(duì)象,一列對(duì)應(yīng)一個(gè)對(duì)象,這些對(duì)象分別封裝其對(duì)應(yīng)schema的一些操作。


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多