久久精品水蜜桃av综合天堂,久久精品丝袜高跟鞋,精品国产肉丝袜久久,国产一区二区三区色噜噜,黑人video粗暴亚裔
站長百科 | 數(shù)字化技能提升教程 數(shù)字化時代生存寶典
首頁
數(shù)字化百科
電子書
建站程序
開發(fā)
服務(wù)器
辦公軟件
開發(fā)教程
服務(wù)器教程
軟件使用教程
運營教程
熱門電子書
WordPress教程
寶塔面板教程
CSS教程
Shopify教程
導(dǎo)航
程序頻道
推廣頻道
網(wǎng)賺頻道
人物頻道
網(wǎng)站程序
網(wǎng)頁制作
云計算
服務(wù)器
CMS
論壇
網(wǎng)店
虛擬主機
cPanel
網(wǎng)址導(dǎo)航
WIKI使用導(dǎo)航
WIKI首頁
最新資訊
網(wǎng)站程序
站長人物
頁面分類
使用幫助
編輯測試
創(chuàng)建條目
網(wǎng)站地圖
站長百科導(dǎo)航
站長百科
主機偵探
IDCtalk云說
跨境電商導(dǎo)航
WordPress啦
站長專題
網(wǎng)站推廣
網(wǎng)站程序
網(wǎng)站賺錢
虛擬主機
cPanel
網(wǎng)址導(dǎo)航專題
云計算
微博營銷
虛擬主機管理系統(tǒng)
開放平臺
WIKI程序與應(yīng)用
美國十大主機
編輯“
ThinkPHP開發(fā)指南-模型之視圖模型
”
人物百科
|
營銷百科
|
網(wǎng)賺百科
|
站長工具
|
網(wǎng)站程序
|
域名主機
|
互聯(lián)網(wǎng)公司
|
分類索引
跳轉(zhuǎn)至:
導(dǎo)航
、?
搜索
警告:
您沒有登錄。如果您做出任意編輯,您的IP地址將會公開可見。如果您
登錄
或
創(chuàng)建
一個賬戶,您的編輯將歸屬于您的用戶名,且將享受其他好處。
反垃圾檢查。
不要
加入這個!
<span style="border:1px solid #000; float:right; text-align:center; padding:6px;"><strong>導(dǎo)航:</strong>[[ThinkPHP開發(fā)指南-模型|上一頁]]</span> <div style="clear:both;"></div> *'''[[ThinkPHP開發(fā)指南-模型-視圖模型之視圖查詢|視圖查詢]]''' *'''視圖定義''' '''視圖'''通常是指[[數(shù)據(jù)庫]]的視圖,視圖是一個虛擬表,其內(nèi)容由查詢定義。同真實的表一樣,視圖包含一系列帶有名稱的列和行數(shù)據(jù)。但是,視圖并不在數(shù)據(jù)庫中以存儲的數(shù)據(jù)值集形式存在。行和列數(shù)據(jù)來自由定義視圖的查詢所引用的表,并且在引用視圖時動態(tài)生成。對其中所引用的基礎(chǔ)表來說,視圖的作用類似于篩選。定義視圖的篩選可以來自當前或其它數(shù)據(jù)庫的一個或多個表,或者其它視圖。分布式查詢也可用于定義使用多個異類源數(shù)據(jù)的視圖。如果有幾臺不同的服務(wù)器分別存儲組織中不同地區(qū)的數(shù)據(jù),而您需要將這些服務(wù)器上相似結(jié)構(gòu)的數(shù)據(jù)組合起來,這種方式就很有用。 '''視圖'''在有些數(shù)據(jù)庫下面并不被支持,但是[[ThinkPHP]]模擬實現(xiàn)了數(shù)據(jù)庫的視圖,該功能可以用于多表聯(lián)合查詢。非常適合解決HAS_ONE 和 BELONGS_TO 類型的關(guān)聯(lián)查詢。要定義視圖模型,只需要繼承ViewModel,然后設(shè)置viewFields屬性即可。例如下面的例子,我們定義了一個BlogView模型對象,其中包括了Blog模型的id、name、title和User模型的name,以及Category模型的title字段,我們通過創(chuàng)建BlogView模型來快速讀取一個包含了User名稱和類別名稱的Blog記錄(集)。 '''[[PHP]]代碼''' <pre> class BlogViewModel extends ViewModel { public $viewFields = array( 'Blog'=>array('id','name','title'), 'Category'=>array('title'=>'category_name', '_on'=>'Blog.category_id=Category.id'), 'User'=>array('name'=>'username', '_on'=>'Blog.user_id=User.id'), ); } </pre> 我們來解釋一下定義的格式代表了什么。$viewFields 屬性表示視圖模型包含的字段,每個元素定義了某個數(shù)據(jù)表或者模型的字段。例如: '''PHP代碼''' <pre> 'Blog'=>array('id','name','title') </pre> 表示BlogView視圖模型要包含Blog模型中的id、name和title字段屬性,這個其實很容易理解,就和數(shù)據(jù)庫的視圖要包含某個數(shù)據(jù)表的字段一樣。而Blog相當于是給[[Blog]]模型對應(yīng)的數(shù)據(jù)表定義了一個別名。如果希望給blog表定義另外的別名,可以使用 '''PHP代碼''' <pre> '_as'=>'myBlog' </pre> BlogView視圖模式除了包含Blog模型之外,還包含了Category和User模型,下面的定義: '''PHP代碼''' <pre> 'Category'=>array('title'=>'category_name') </pre> 和上面類似,表示BlogView視圖模型還要包含Category模型的title字段,因為視圖模型里面已經(jīng)存在了一個title字段,所以我們通過 '''PHP代碼''' <pre> 'title'=>'category_name' </pre> 把Category模型的title字段映射為category_name字段,如果有多個字段,可以使用同樣的方式添加??梢酝ㄟ^_on來給視圖模型定義關(guān)聯(lián)查詢條件,例如: '''PHP代碼''' <pre> '_on'=>'Blog.category_id=Category.id' </pre> 理解之后,User模型的定義方式同樣也就很容易理解了。 '''PHP代碼''' <pre> Blog.categoryId = Category.id AND Blog.userId = User.id </pre> 最后,我們把視圖模型的定義翻譯成[[SQL]]語句就更加容易理解視圖模型的原理了。假設(shè)我們不帶任何其他條件查詢?nèi)康淖侄危敲床樵兊腟QL語句就是 '''PHP代碼''' <pre> Select Blog.id as id, Blog.name as name, Blog.title as title, Category.title as category_name, User.name as username from think_blog Blog JOIN think_category Category JOIN think_user User where Blog.category_id=Category.id AND Blog.user_id=User.id </pre> 視圖模型的定義并不需要先單獨定義其中的模型類,系統(tǒng)會默認按照系統(tǒng)的規(guī)則進行數(shù)據(jù)表的定位。如果Blog模型并沒有定義,那么系統(tǒng)會自動根據(jù)當前模型的表前綴和后綴來自動獲取對應(yīng)的數(shù)據(jù)表。也就是說,如果我們并沒有定義Blog模型類,那么上面的定義后,系統(tǒng)在進行視圖模型的操作的時候會根據(jù)[[Blog]]這個名稱和當前的表前綴設(shè)置(假設(shè)為Think_ )獲取到對應(yīng)的數(shù)據(jù)表可能是think_blog。 ThinkPHP還可以支持視圖模型的JOIN類型定義,我們可以把上面的視圖定義改成: '''PHP代碼''' <pre> public $viewFields = array( 'Blog'=>array('id','name','title','_type'=>'LEFT'), 'Category'=>array('title'=>'category_name','_on'=>'Category.id=Blog.category_id','_type'=>'RIGHT'), 'User'=>array('name'=>'username','_on'=>'User.id=Blog.user_id'), ); </pre> 需要注意的是,這里的_type定義對下一個表有效,因此要注意視圖模型的定義順序。Blog模型的 '''PHP代碼''' <pre> '_type'=>'LEFT' </pre> 針對的是下一個模型Category而言,通過上面的定義,我們在查詢的時候最終生成的SQL語句就變成: '''SQL代碼''' <pre> Select Blog.id as id, Blog.name as name, Blog.title as title, Category.title as category_name, User.name as username from think_blog Blog LEFT JOIN think_category Category ON Blog.category_id=Category.id RIGHT JOIN think_user User ON Blog.user_id=User.id </pre> 我們可以在試圖模型里面定義特殊的字段,例如下面的例子定義了一個統(tǒng)計字段 '''PHP代碼''' <pre> 'Category'=>array('title'=>'category_name','COUNT(Blog.id)'=>'count','_on'=>'Category.id=Blog.category_id'), </pre> [[category:ThinkPHP]]
摘要:
請注意,您對站長百科的所有貢獻都可能被其他貢獻者編輯,修改或刪除。如果您不希望您的文字被任意修改和再散布,請不要提交。
您同時也要向我們保證您所提交的內(nèi)容是您自己所作,或得自一個不受版權(quán)保護或相似自由的來源(參閱
Wordpress-mediawiki:版權(quán)
的細節(jié))。
未經(jīng)許可,請勿提交受版權(quán)保護的作品!
取消
編輯幫助
(在新窗口中打開)
取自“
http://www.kktzf.com.cn/wiki/ThinkPHP開發(fā)指南-模型之視圖模型
”