ThinkPHP CURD方法之field方法詳解
ThinkPHP CURD方法的field方法屬于模型的連貫操作方法之一,主要目的是標(biāo)識(shí)要返回或者操作的字段,可以用于查詢和寫(xiě)入操作。
1、用于查詢
在查詢操作中field方法是使用最頻繁的。
$Model->field('id,title,content')->select();
這里使用field方法指定了查詢的結(jié)果集中包含id,title,content三個(gè)字段的值。執(zhí)行的SQL相當(dāng)于:
SELECT id,title,content FROM table
當(dāng)然,除了select方法之外,所有的查詢方法,包括find等都可以使用field方法,這里只是以select為例說(shuō)明。
上面的例子也可以使用數(shù)組代替:
$Model->field(array('id','title','content'))->select();
最終執(zhí)行的SQL和上面等效。
似乎看起來(lái)數(shù)組的用法過(guò)于復(fù)雜,不過(guò)先別下這個(gè)結(jié)論,后面就會(huì)明白數(shù)組用法的好處了。
數(shù)組方式的定義可以為某些字段定義別名,例如:
$Model->field(array('id','title'=>'name','content'))->select();
執(zhí)行的SQL相當(dāng)于:
SELECT id,title as name,content FROM table
如果你希望直接使用:
$Model->field('id,title as name,content')->select();
可能會(huì)得到錯(cuò)誤的結(jié)果。
對(duì)于一些更復(fù)雜的字段要求,數(shù)組的優(yōu)勢(shì)則更加明顯,例如:
$Model->field(array('id','concat(name,'-',id)'=>'truename','LEFT(title,7)'=>'sub_title'))->select();
執(zhí)行的SQL相當(dāng)于:
SELECT id,concat(name,'-',id) as truename,LEFT(title,7) as sub_title FROM table
想必大家都明白了,對(duì)于需要在field中使用SQL函數(shù)的情況,數(shù)組方式可以很好的解決。
是不是field方法就這么點(diǎn)作用了呢?如果你這么認(rèn)為,那就太低估ThinkPHP的field方法了,ThinkPHP考慮的細(xì)節(jié)遠(yuǎn)比你想象的要周到。
先看下面的情況,如果有一個(gè)表有非常多的字段,而且有兩個(gè)需求,首先要求需要獲取所有的字段,這個(gè)也許很簡(jiǎn)單,因?yàn)椴徽{(diào)用field方法或者直接使用空的field方法都能做到,事實(shí)上,的確如此:
$Model->select(); $Model->field()->select(); $Model->field('*')->select();
上面三個(gè)用法是等效的,都相當(dāng)于執(zhí)行SQL:
SELECT * FROM table
但是這并不是我說(shuō)的獲取所有字段,我希望顯式的調(diào)用所有字段(對(duì)于對(duì)性能要求比較高的系統(tǒng),這個(gè)要求并不過(guò)分,起碼是一個(gè)比較好的習(xí)慣),那么OK,仍然很簡(jiǎn)單,下面的用法可以完成預(yù)期的作用:
$Model->field(true)->select();
fied(true)的用法會(huì)顯式的獲取數(shù)據(jù)表的所有字段列表,哪怕你的數(shù)據(jù)表有100個(gè)字段。
第二個(gè)需求是我希望獲取排除content字段(文本字段的值非常耗內(nèi)存)之外的所有字段值,我們就可以使用field方法的排除功能,例如下面的方式就可以實(shí)現(xiàn)所說(shuō)的功能:
$Model->field('content',true)->select();
要排除更多的字段也可以:
$Model->field('user_id,content',true)->select(); //或者用 $Model->field(array('user_id','content'),true)->select();
2、用于寫(xiě)入
除了查詢操作之外,field方法還有一個(gè)非常重要的安全功能--字段合法性檢測(cè)(注意:該功能3.1版本開(kāi)始才能支持)。field方法結(jié)合create方法使用就可以完成表單提交的字段合法性檢測(cè),如果我們?cè)诒韱翁峤坏奶幚矸椒ㄖ惺褂昧耍?/p>
$Model->field('title,email,content')->create();
即表示表單中的合法字段只有title,email和content字段,無(wú)論用戶通過(guò)什么手段更改或者添加了瀏覽器的提交字段,都會(huì)直接屏蔽。因?yàn)?,其他的所有字段我們都不希望由用戶提交?lái)決定,你可以通過(guò)自動(dòng)完成功能定義額外的字段寫(xiě)入。
- 基于ThinkPHP實(shí)現(xiàn)批量刪除
- 徹底刪除thinkphp3.1案例blog標(biāo)簽的方法
- ThinkPHP實(shí)現(xiàn)批量刪除數(shù)據(jù)的代碼實(shí)例
- Thinkphp中的curd應(yīng)用實(shí)用要點(diǎn)
- ThinkPHP3.1數(shù)據(jù)CURD操作快速入門(mén)
- ThinkPHP CURD方法之data方法詳解
- ThinkPHP CURD方法之order方法詳解
- ThinkPHP CURD方法之table方法詳解
- ThinkPHP CURD方法之page方法詳解
- ThinkPHP CURD方法之limit方法詳解
- ThinkPHP CURD方法之where方法詳解
- thinkphp的CURD和查詢方式介紹
- thinkPHP刪除前彈出確認(rèn)框的簡(jiǎn)單實(shí)現(xiàn)方法
相關(guān)文章
php實(shí)現(xiàn)產(chǎn)品加入購(gòu)物車(chē)功能(1)
這篇文章主要為大家詳細(xì)介紹了php實(shí)現(xiàn)產(chǎn)品加入購(gòu)物車(chē)功能,具有一定的參考價(jià)值,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03利用php實(shí)現(xiàn)一周之內(nèi)自動(dòng)登錄存儲(chǔ)機(jī)制(cookie、session、localStorage)
本篇文章主要介紹了利用php實(shí)現(xiàn)一周之內(nèi)自動(dòng)登錄存儲(chǔ)機(jī)制(cookie、session、localStorage),可以實(shí)現(xiàn)一周之內(nèi)免費(fèi)登陸,感興趣的小伙伴們可以參考一下。2016-10-10PHP+shell腳本操作Memcached和Apache Status的實(shí)例分享
這篇文章主要介紹了PHP環(huán)境下使用shell腳本操作Memcached和Apache Status的方法,分別還可以控制Memcached進(jìn)程的啟動(dòng)以及記錄Apache Status數(shù)據(jù)到數(shù)據(jù)庫(kù),需要的朋友可以參考下2016-03-03Laravel框架實(shí)現(xiàn)利用中間件進(jìn)行操作日志記錄功能
這篇文章主要介紹了Laravel框架實(shí)現(xiàn)利用中間件進(jìn)行操作日志記錄功能,結(jié)合實(shí)例形式分析了Laravel框架中間件的創(chuàng)建、引入以及使用中間件進(jìn)行操作日志記錄功能的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-06-06Laravel 創(chuàng)建指定表 migrate的例子
今天小編就為大家分享一篇Laravel 創(chuàng)建指定表 migrate的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10Yii操作數(shù)據(jù)庫(kù)實(shí)現(xiàn)動(dòng)態(tài)獲取表名的方法
這篇文章主要介紹了Yii操作數(shù)據(jù)庫(kù)實(shí)現(xiàn)動(dòng)態(tài)獲取表名的方法,涉及Yii框架針對(duì)數(shù)據(jù)庫(kù)的動(dòng)態(tài)操作技巧,需要的朋友可以參考下2016-03-03