多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當前位置:首頁 > php框架 > ThinkPHP > ThinkPHP3.1快速入門(14)命名范圍

ThinkPHP3.1快速入門(14)命名范圍

來源:程序員人生   發(fā)布時間:2014-05-20 13:53:55 閱讀次數(shù):4053次
在應用開發(fā)過程中,使用最多的操作還是數(shù)據(jù)查詢操作,憑借ThinkPHP的連貫操作的特性,可以使得查詢操作變得更優(yōu)雅和清晰,然而新版的命名范圍功能,則是給模型操作定義了一系列的查詢封裝,讓你更方便的查詢數(shù)據(jù)。

定義屬性

要使用命名范圍功能,主要涉及到模型類的_scope屬性定義和scope連貫操作方法的使用。
我們首先定義_scope屬性:
class NewsModel extends Model {
    protected $_scope = array(
        // 命名范圍normal
        'normal'=>array(
            'where'=>array('status'=>1),
        ),
        // 命名范圍latest
        'latest'=>array(
            'order'=>'create_time DESC',
            'limit'=>10,
        ),
    );
}
_scope屬性是一個數(shù)組,每個數(shù)組項表示定義一個命名范圍,命名范圍的定義格式為:
'命名范圍標識'=>array(
    '屬性1'=>'值1',
    '屬性2'=>'值2',
    ...
)
命名范圍標識:可以是任意的字符串,用于標識當前定義的命名范圍名稱。
命名范圍支持的屬性包括:
where查詢條件
field查詢字段
order結(jié)果排序
table查詢表名
limit結(jié)果限制
page結(jié)果分頁
havinghaving查詢
groupgroup查詢
lock查詢鎖定
distinct唯一查詢
cache查詢緩存
每個命名范圍的定義可以包括這些屬性中一個或者多個。

方法調(diào)用

屬性定義完成后,接下來就是使用scope方法進行命名范圍的調(diào)用了,每調(diào)用一個命名范圍,就相當于執(zhí)行了命名范圍中定義的相關(guān)操作選項對應的連貫操作方法。

調(diào)用某個命名范圍

最簡單的調(diào)用方式就直接調(diào)用某個命名范圍,例如:
$Model = D('News'); // 這里必須使用D方法 因為命名范圍在模型里面定義
$Model->scope('normal')->select();
$Model->scope('latest')->select();
生成的SQL語句分別是:
SELECT * FROM think_news WHERE status=1
SELECT * FROM think_news ORDER BY create_time DESC LIMIT 10

調(diào)用多個命名范圍

也可以支持同時調(diào)用多個命名范圍定義,例如:
$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
如果兩個命名范圍的定義存在沖突,則后面調(diào)用的命名范圍定義會覆蓋前面的相同屬性的定義
如果調(diào)用的命名范圍標識不存在,則會忽略該命名范圍,例如:
$Model->scope('normal,new')->select();
上面的命名范圍中new是不存在的,因此只有normal命名范圍生效,生成的SQL語句是:
SELECT * FROM think_news WHERE status=1

默認命名范圍

系統(tǒng)支持默認命名范圍功能,如果你定義了一個default命名范圍,例如:
    protected $_scope = array(
        // 默認的命名范圍
        'default'=>array(
            'where'=>array('status'=>1),
            'limit'=>10,
        ),
    );
那么調(diào)用default命名范圍可以直接使用:
$Model->scope()->select();
而無需再傳入命名范圍標識名
$Model->scope('default')->select();
雖然這兩種方式是等效的。

命名范圍調(diào)整

如果你需要在normal命名范圍的基礎上增加額外的調(diào)整,可以使用:
$Model->scope('normal',array('limit'=>5))->select();
生成的SQL語句是:
SELECT * FROM think_news WHERE status=1 LIMIT 5
當然,也可以在兩個命名范圍的基礎上進行調(diào)整,例如:
$Model->scope('normal,latest',array('limit'=>5))->select();
生成的SQL是:
SELECT * FROM think_news WHERE status=1 ORDER BY create_time DESC LIMIT 5

自定義命名范圍

又或者,干脆不用任何現(xiàn)有的命名范圍,我直接傳入一個命名范圍:
$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

與連貫操作混合使用

命名范圍一樣可以和之前的連貫操作混合使用,例如定義了命名范圍_scope屬性:
protected $_scope = array(
    'normal'=>array(
        'where'=>array('status'=>1),
        'field'=>'id,title',
        'limit'=>10,
    ),
);
然后在使用的時候,可以這樣調(diào)用:
$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
如果定義的命名范圍和連貫操作的屬性有沖突,則后面調(diào)用的會覆蓋前面的。
如果是這樣調(diào)用:
$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

動態(tài)調(diào)用

除了采用scope方法調(diào)用命名范圍外,我們還支持直接調(diào)用命名范圍名稱的方式來動態(tài)調(diào)用,例如:
$Model->scope('normal',array('limit'=>5))->select();
查詢操作也可以采用:
$Model->normal(array('limit'=>5))->select();
的方式調(diào)用。
normal(array('limit'=>5)) 表示調(diào)用normal命名范圍,并且傳入額外的array('limit'=>5)參數(shù)。
由于采用的是__call魔術(shù)方法機制,因此這樣調(diào)用的前提是你定義的命名范圍名稱沒有和現(xiàn)有操作方法沖突。

總結(jié)

命名范圍功能的優(yōu)勢在于可以一次定義多次調(diào)用,并且在項目中也能起到分工配合的規(guī)范,避免開發(fā)人員在寫CURD操作的時候出現(xiàn)問題,項目經(jīng)理只需要合理的規(guī)劃命名范圍即可。
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 欧美猛交xxxx免费看 | 91综合精品网站久久 | 黄色录像大片毛片aa | 亚洲动漫在线观看 | 91综合网 | 国产suv精品一区二区四区三区 | 亚洲欧洲日本天天堂在线观看 | 五月香福利 | 亚洲国产精品第一区二区 | 欧美高清18 | 国产二区三区 | 亚洲一区www | 91精品免费在线观看 | 九九99久久精品影视 | 最近免费中文字幕大全免费版视频 | 国产精品久久毛片 | 国产1区2区3区 | 欧美性猛交xxxx乱大交丰满 | 亚洲午夜国产精品无卡 | 91丨九色丨首页在线观看 | 亚洲91| 琪琪在线 | 爱爱视频天天看 | 爱爱小视频日本 | 亚洲v日本 | 国产亚洲一区二区三区在线 | 校园春色偷拍自拍 | 亚洲精品一区二区三区在线看 | 亚洲图片校园另激情类小说 | 精品一区二区三区免费观看 | 全国男人的天堂网站 | 欧美整片完整片视频在线 | 精品久久成人 | 国产精品毛片 | 日本中文字幕视频 | 国产成人精品久久二区二区 | 国模无水印一区二区三区 | 亚洲国产精品线播放 | 欧美三级免费观看 | 日韩 欧美 中文 | 宇都宫紫苑在线播放 rmvb |