1. 程式人生 > >關於TP欄位field的一些理解

關於TP欄位field的一些理解

field方法屬於模型的連貫操作方法之一,主要目的是標識要返回或者操作的欄位,可以用於查詢和寫入操作。

1、用於查詢

指定欄位

在查詢操作中field方法是使用最頻繁的。

  1. $Model->field('id,title,content')->select();

這裡使用field方法指定了查詢的結果集中包含id,title,content三個欄位的值。執行的SQL相當於:

  1. SELECT id,title,content FROM table

可以給某個欄位設定別名,例如:

  1. $Model->field('id,nickname as name')->select
    ();

執行的SQL語句相當於:

  1. SELECT id,nickname as name FROM table
使用SQL函式

可以在field方法中直接使用函式,例如:

  1. $Model->field('id,SUM(score)')->select();

執行的SQL相當於:

  1. SELECT id,SUM(score) FROM table

當然,除了select方法之外,所有的查詢方法,包括find等都可以使用field方法,這裡只是以select為例說明。

使用陣列引數

field方法的引數可以支援陣列,例如:

  1. $Model->field(array('id',
    'title','content'))->select();

最終執行的SQL和前面用字串方式是等效的。

陣列方式的定義可以為某些欄位定義別名,例如:

  1. $Model->field(array('id','nickname'=>'name'))->select();

執行的SQL相當於:

  1. SELECT id,nickname as name FROM table

對於一些更復雜的欄位要求,陣列的優勢則更加明顯,例如:

  1. $Model->field(array('id','concat(name,'-',id)'=>'truename','LEFT(title,7)'
    =>'sub_title'))->select();

執行的SQL相當於:

  1. SELECT id,concat(name,'-',id)as truename,LEFT(title,7)as sub_title FROM table
獲取所有欄位

如果有一個表有非常多的欄位,需要獲取所有的欄位(這個也許很簡單,因為不呼叫field方法或者直接使用空的field方法都能做到):

  1. $Model->select();
  2. $Model->field()->select();
  3. $Model->field('*')->select();

上面三個用法是等效的,都相當於執行SQL:

  1. SELECT * FROM table

但是這並不是我說的獲取所有欄位,我希望顯式的呼叫所有欄位(對於對效能要求比較高的系統,這個要求並不過分,起碼是一個比較好的習慣),那麼OK,仍然很簡單,下面的用法可以完成預期的作用:

  1. $Model->field(true)->select();

field(true)的用法會顯式的獲取資料表的所有欄位列表,哪怕你的資料表有100個欄位。

欄位排除

如果我希望獲取排除資料表中的content欄位(文字欄位的值非常耗記憶體)之外的所有欄位值,我們就可以使用field方法的排除功能,例如下面的方式就可以實現所說的功能:

  1. $Model->field('content',true)->select();

則表示獲取除了content之外的所有欄位,要排除更多的欄位也可以:

  1. $Model->field('user_id,content',true)->select();
  2. //或者用
  3. $Model->field(array('user_id','content'),true)->select();

2、用於寫入

除了查詢操作之外,field方法還有一個非常重要的安全功能--欄位合法性檢測(注意:該功能3.1版本開始才能支援)。field方法結合create方法使用就可以完成表單提交的欄位合法性檢測,如果我們在表單提交的處理方法中使用了:

  1. $Model->field('title,email,content')->create();

即表示表單中的合法欄位只有title,emailcontent欄位,無論使用者通過什麼手段更改或者添加了瀏覽器的提交欄位,都會直接遮蔽。因為,其他是所有欄位我們都不希望由使用者提交來決定,你可以通過自動完成功能定義額外的欄位寫入。

同樣的,field也可以結合add和save方法,進行欄位過濾,例如:

  1. $Model->field('title,email,content')->save($data);

如果data資料中包含有title,email,content之外的欄位資料的話,也會過濾掉。

相關推薦

關於TPfield一些理解

field方法屬於模型的連貫操作方法之一,主要目的是標識要返回或者操作的欄位,可以用於查詢和寫入操作。 1、用於查詢 指定欄位 在查詢操作中field方法是使用最頻繁的。 $Model->field('id,title,content')->select

ES如何指定返回的field

在elasticsearch 2.x版本中,如果我們想指定查詢返回的欄位,可以使用fields欄位設定,程式碼如下:   String index = xxx; String type = xxx; // 指定要返回的欄位 String[]

logstash nested內嵌 field protobuf解碼 codec 的解決辦法

logstash nested內嵌欄位 field protobuf解碼 codec 的解決辦法 主要需求 logstash-codec 下https://www.elastic.co/guide/en/logstash/6.3/codec-plugins.html此類解碼器 只能應用在原始資料上比如

[C#] (field),屬性(property) 以及 get 和 set

欄位應該永遠為私有,私有欄位自然是不許使用者隨便訪問的,而屬性實際上是一個寫法有些特別的函式,為私有欄位的訪問提供介面,也就是通過屬性讀取私有域,或修改私有域,目的就是實現安全訪問。 Java和C++都通過函式實現對私有變數的修改和訪問,C#改成了屬性的方式。

fastjson:獲取類(Class)的所有可序列化(field)

用fastjson對一個類進行序列化時,在沒有類的例項只有類的Class的情況下,如果想知道這個Class有所有可以被序列化的欄位名,可以用com.alibaba.fastjson.util.TypeU

fastjson:javabean按(field)序列化儲存為Map並反序列化

大部分json工具對java物件整體序列化都提供了簡單的呼叫方式,以fastjson為例: Model model = new Model(); String json = JSON.toJSONString(model); // 序列化 Model mo

update更新一個一些資料為同一個值

問題:一個表批量修改部分記錄為同一個值 相關問題:一堆state只允許一個為1,其他全為0。 比如:資料庫score 表只許一條記錄的major的值為123,這一條記錄的id為1,其他的major的值都為bbbb 解決: update score set major

7.2 Move Field 遷移

在目標類中新建一個欄位,修改源欄位的所有呼叫者,讓他們引用新欄位 更多精彩 更多技術部落格,請移步 asing1elife’s blog 前置條件 在使用 7.3 Extract Class 提煉類 之前,通常需要使用該方法

F() 表示式,這裡的F我理解是fast的意思,用它能節省讀寫資料庫的時間,在資料庫sql語言層面對進行自增(+= 1)操作

1、F() 表示式,F我理解是fast的意思,用它能節省讀寫資料庫的時間,在資料庫sql語言層面對欄位進行自增(+= 1)操作,在Query Expressions章節介紹,這章沒讀過,趕緊收藏。 https://docs.djangoproject.com/en/2.1/ref/models/

Django Field lookups (查詢)

欄位查詢是指定SQL WHERE子句的核心內容的方式。 它們被指定為QuerySet方法filter()、exclude()和get()的關鍵字引數。 1、exact:精確查詢。如果為比較提供的值為None,則會將其解釋為SQL NULL   在MySQL中,資料庫表的“排序”設定決定了精確的比較是否區

Elasticsearch 學習之Field Collapsing(摺疊)

Field Collapsing(欄位摺疊)不能與scroll、rescore以及search after 結合使用 collapse欄位:表示按照age(每個age對應多條document結果)的值摺疊(keyword或者數值) sort:表示按照age欄位排序 f

ES Mapping、型別Field type詳解

  欄位型別概述 一級分類 二級分類 具體型別 核心型別 字串型別 string,text,keyword 整數型別 integer,long,short,byte 浮點型別 double,float,half_float,scaled_float 邏輯型別 boolean 日期型

ES Field Collapsing 摺疊使用詳解

在 Elasticsearch 5.x 有一個欄位摺疊(Field Collapsing,#22337)的功能非常有意思,在這裡分享一下,   欄位摺疊是一個很有歷史的需求了,可以看這個 issue,編號#256,最初是2010年7月提的issue,也是討論最多的帖子之一(240+評論),

Field的getModifiers()方法返回int型別值表示該的修飾符

JAVA 反射機制中,Field的getModifiers()方法返回int型別值表示該欄位的修飾符。 其中,該修飾符是java.lang.reflect.Modifier的靜態屬性。 對應表如下: PUBLIC: 1 PRIVATE: 2 PROTECTED: 4 S

solr:managed-schema一些的意思

以下面這個漢字的分詞器為例.  <fieldType name="text_ik" class="solr.TextField"> <analyzer type="index" useSmart="false" clas

mysql order by field 按指定排序

舉個例子 a表裡有b欄位 b欄位裡有資料-1,1,2,3,4 如果想把4,2,3的排在最前面,其他的排在後面,並且保留4,2,3的順序 sql: select * from a order by FIELD(3,2,4) DESC 如果是這樣寫sql: s

關於TP3.2框架讀取Sql server中文資料以及處理亂碼的一些小心得

最近要做一個專案,需要使用TP3.2框架,之前什麼也不會,就硬著頭皮上了,結果真的鬧了挺多emmmmmm挺低階的錯誤,就像SQL Server中文欄位的讀取,一開始我是照著讀取英文欄位的格式來寫的,在Model層裡 public function getAdminByUsername($userna

java 覆蓋(field)

欄位的覆蓋: public class Father { public String name="Father"; public static void main(String[] args) { Son son=new Son(); Syste

如何理解 package.json 中的 proxy

入職新公司以來,第一個月接手vue專案,第二個月接手angularjs專案,第三個月加入react重構專案。心生感嘆:業務驅動式學習是一種高效率的學習方式,保持好奇心,在業務中快速成長! 新專案中在package.json中有一個proxy欄位,這是我從來沒接觸過的,因此就有了此文的誕

通過Field (反射)給私有賦值

public class Person { public String name; public char sex; private int age; public String getName() { return name; } p