麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > PHP > 正文

ThinkPHP3.1新特性之命名范圍的使用

2020-03-22 20:22:18
字體:
來源:轉載
供稿:網友
ThinkPHP3.1的命名范圍功能,給模型操作提供了一系列的(連貫操作)封裝,讓你更方便的查詢和操作數據。下面我們就來具體了解下這一用法。1.定義屬性要使用命名范圍功能,主要涉及到模型類的_scope屬性定義和scope連貫操作方法的使用。
我們首先定義_scope屬性:html' target='_blank'>class NewsModel extends Model { protected $_scope = array( // 命名范圍normal 'normal'= array( 'where'= array('status'= 1), // 命名范圍latest 'latest'= array( 'order'= 'create_time DESC', 'limit'= 10,_scope屬性是一個數組,每個數組項表示定義一個命名范圍,命名范圍的定義格式為:'命名范圍標識'= array( '屬性1'= '值1', '屬性2'= '值2',2.命名范圍標識:可以是任意的字符串,用于標識當前定義的命名范圍。命名范圍支持的屬性包括:

3.方法調用屬性定義完成后,接下來就是使用scope方法進行命名范圍的調用了,每調用一個命名范圍,就相當于執行了命名范圍中定義的相關操作選項。調用某個命名范圍最簡單的調用方式就直接調用某個命名范圍,例如:$Model = D('News'); // 這里必須使用D方法 因為命名范圍在模型里面定義$Model- scope('normal')- select();$Model- scope('latest')- select();生成的SQL語句分別是:SELECT * FROM think_news WHERE status=1SELECT * FROM think_news ORDER BY create_time DESC LIMIT 10調用多個命名范圍也可以支持同時調用多個命名范圍定義,例如:$Model- scope('normal')- scope('latest')- select();或者簡化為:$Model- scope('normal,latest')- select();生成的SQL都是:SELECT * FROM think_news WHERE status=1 ORDER BY create_time DESC LIMIT 10如果兩個命名范圍的定義存在沖突,則后面調用的命名范圍定義會覆蓋前面的相同屬性的定義。
如果調用的命名范圍標識不存在,則會忽略該命名范圍,例如:$Model- scope('normal,new')- select();上面的命名范圍中new是不存在的,因此只有normal命名范圍生效,生成的SQL語句是:SELECT * FROM think_news WHERE status=1
4.默認命名范圍系統支持默認命名范圍功能,如果你定義了一個default命名范圍,例如: protected $_scope = array( // 默認的命名范圍 'default'= array( 'where'= array('status'= 1), 'limit'= 10,那么調用default命名范圍可以直接使用:$Model- scope()- select();而無需再傳入命名范圍標識名$Model- scope('default')- select();雖然這兩種方式是等效的。命名范圍調整如果你需要在normal命名范圍的基礎上增加額外的調整,可以使用:$Model- scope('normal',array('limit'= 5))- select();生成的SQL語句是:SELECT * FROM think_news WHERE status=1 LIMIT 5當然,也可以在兩個命名范圍的基礎上進行調整,例如:$Model- scope('normal,latest',array('limit'= 5))- select();生成的SQL是:SELECT * FROM think_news WHERE status=1 ORDER BY create_time DESC LIMIT 5
自定義命名范圍又或者,干脆不用任何現有的命名范圍,我直接傳入一個命名范圍:$Model- scope(array('field'= 'id,title','limit'= 5,'where'= 'status=1','order'= 'create_time DESC'))- select();這樣,生成的SQL變成:SELECT id,title FROM think_news WHERE status=1 ORDER BY create_time DESC LIMIT 5
5.與連貫操作混合使用命名范圍一樣可以和之前的連貫操作混合使用,例如定義了命名范圍_scope屬性:protected $_scope = array( 'normal'= array( 'where'= array('status'= 1), 'field'= 'id,title', 'limit'= 10,然后在使用的時候,可以這樣調用:$Model- scope('normal')- limit(8)- order('id desc')- select();這樣,生成的SQL變成:SELECT id,title FROM think_news WHERE status=1 ORDER BY id desc LIMIT 8如果定義的命名范圍和連貫操作的屬性有沖突,則后面調用的會覆蓋前面的。
如果是這樣調用:$Model- limit(8)- scope('normal')- order('id desc')- select();生成的SQL則是:SELECT id,title FROM think_news WHERE status=1 ORDER BY id desc LIMIT 10
總結
命名范圍功能的優勢在于可以一次定義多次調用,并且在項目中也能起到分工配合的規范,避免開發人員在寫CURD操作的時候出現問題,項目經理只需要合理的規劃命名范圍即可。PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 91一区二区三区久久久久国产乱 | 做爰xxxⅹ性护士hd在线 | 午夜精品老牛av一区二区三区 | 手机免费看一级片 | 91精品中文字幕 | 久久国产精品久久久久 | 日本a∨精品中文字幕在线 欧美1—12sexvideos | 天天看逼| 免费一级毛片免费播放 | 性猛aa久久久 | 污黄视频在线观看 | 久久久久国产成人免费精品免费 | 欧美黄色大片免费观看 | 亚洲嫩草av | 国产成人羞羞视频在线 | 91美女视频在线 | 欧美日韩视频第一页 | 精品国产一区二区亚洲人成毛片 | 久久久久久片 | 精品免费久久 | 久久久久久久一区二区 | 午夜视频免费播放 | 最新在线黄色网址 | 成人啪啪18免费网站 | 国产亚洲精品久久久久久久 | 九九热在线视频观看 | 萌白酱福利视频在线网站 | 欧美性a视频 | 激情视频免费看 | 天天夜夜操操 | 国产成人精品一区二区仙踪林 | 国产精品视频免费在线观看 | 特级毛片全部免费播放器 | 亚洲精品一区中文字幕 | 有兽焉免费动画 | 欧美精品激情在线 | 久久精品中文 | 久久精品视频亚洲 | www.9191.com | 99精品国产一区二区三区 | 羞羞视频一区二区 |