小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

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

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

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

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

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

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

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


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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多