1thinkphp的連貫操作方法中field方法有很多的使用技巧,field方法主要目的是標識要返回或者操作的字段,下面詳細道來。
23 1、用於查詢
4在查詢操作中field方法是使用最頻繁的。56
$model->field('id,title,content')->select();
7 這裡使用field方法指定了查詢的結果集中包含id,title,content三個欄位的值。執行的sql相當於:
89 select id,title,content from table
10當然,除了select方法之外,所有的查詢方法,包括find等都可以使用field方法,這裡只是以select為例說明。
11上面的例子也可以使用陣列代替:
1213
$model->field(array('id','title','content'))->select();
14最終執行的sql和上面等效。
15 ^_^似乎看起來陣列的用法過於複雜,不過先別下這個結論,後面就會明白陣列用法的好處了。
16陣列方式的定義可以為某些字段定義別名,例如:
1718
$model->field(array('id','title'=>'name','content'))->select();
19執行的sql相當於:
2021 select id,title as name,content from table
22如果你希望直接使用:
2324
$model->field('id,title as name,content')->select();
25可能會得到錯誤的結果。
26對於一些更複雜的字段要求,陣列的優勢則更加明顯,例如:
2728
$model->field(array('id','concat(name,'-',id)'=>'truename','left(title,7)'=>'sub_title'))->select();
29執行的sql相當於:
3031 select id,concat(name,'-',id) as truename,left(title,7) as
sub_title from table
32想必大家都明白了,對於需要在field中使用sql函式的情況,陣列方式可以很好的解決。
33 是不是field方法就這麼點作用了呢?如果你這麼認為,那就太低估thinkphp的field方法了,thinkphp考慮的細節遠比你想象的要周到^_^。
34先看下面的情況,如果有乙個表有非常多的字段,而且有兩個需求,首先要求需要獲取所有的字段,這個也許很簡單,因為不呼叫field方法或者直接使用空的field方法都能做到,事實上,的確如此:
3536
$model->select();
37$model->field()->select();
38$model->field('*')->select();
39上面三個用法是等效的,都相當於執行sql:
4041 select *from table
42但是這並不是我說的獲取所有字段,我希望顯式的呼叫所有字段(對於對效能要求比較高的系統,這個要求並不過分,起碼是乙個比較好的習慣),那麼ok,仍然很簡單,下面的用法可以完成預期的作用:
4344
$model->field(true)->select();
45 fied(true
)的用法會顯式的獲取資料表的所有字段列表,哪怕你的資料表有100個字段。
46第二個需求是我希望獲取排除content欄位(文字欄位的值非常耗記憶體)之外的所有字段值,我們就可以使用field方法的排除功能,例如下面的方式就可以實現所說的功能:
4748
$model->field('content',true)->select();
4950
51$model->field('user_id,content',true)->select();
52//
或者用53
$model->field(array('user_id','content'),true)->select();
54 2、用於寫入
55 除了查詢操作之外,field方法還有乙個非常重要的安全功能--欄位合法性檢測(注意:該功能3.1版本開始才能支援)。field方法結合create方法使用就可以完成表單提交的字段合法性檢測,如果我們在表單提交的處理方法中使用了:
5657
$model->field('title,email,content')->create();
58 即表示表單中的合法字段只有title,email和content欄位,無論使用者通過什麼手段更改或者新增了瀏覽器的提交字段,都會直接遮蔽。因為,其他是所有字段我們都不希望由使用者提交來決定,你可以通過自動完成功能定義額外的字段寫入。
call方法以及連貫操作
如果呼叫類中不存在的方法,一定會出現系統錯誤,我們可以利用 call 來提醒呼叫的方法不存在 call 存在兩個引數,第乙個引數是不存在的方法,第乙個引數 其實就是那個不存在的方法 所設定的引數將會以陣列的形式傳遞給第二個引數 接下來主要介紹連貫操作,連貫操作,呼叫不存在的方法,利用 call 將不...
PHP類連貫操作的實現方法
php中的連貫操作看起來的確很酷,也非常的方便 的閱讀,當然了必須是在oop中用才行,在過程化的程式中,就沒有必要用這種方法了。有實現這個方法的有用 call來實現的,而我下面寫的這個例子,則不是用 call的,大家可以擴充套件一下吧。下面寫的這個sql語句組合類,主要是用於學習的,如果有同學想拿去...
陣列的操作方法
array系統內建物件 乙個資料的集合 有個length屬性代表陣列的長度 可以改變 以數字為索引,索引從0開始到length 1結束 操作方法 1,給陣列尾部新增資料 資料.push 元素1,元素2.引數 要新增的資料,可以是乙個也可以是多個 返回值 返回新增陣列的長度,原陣列改變,變成新增後的陣...