ThinkPHP的連貫操作方法中field方法

2022-09-12 17:54:12 字數 2408 閱讀 5617

1

thinkphp的連貫操作方法中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.引數 要新增的資料,可以是乙個也可以是多個 返回值 返回新增陣列的長度,原陣列改變,變成新增後的陣...