getField() 使用技巧
getField() 方法是 ThinkPHP 中用來獲取字段值的方法,區別於 select() 和 find() 方法,通常僅用於獲取個別字段的值。但是事實上並沒有那么簡單,該方法的用法總結如下:
獲取某個字段值
這個是 getField() 方法最基本的用法,用於獲取符合條件的某個字段值。
// 實例化User對象
$User = M("User");
// 獲取ID為3的用戶的昵稱
$nickname = $User->where('id=3')->getField('nickname');
返回的 nickname 是一個字符串結果。也就是說,即使有滿足條件的多個字段,也只會返回一個結果。
獲取某個字段列
如果希望返回符合要求的字段列(多個結果),可以使用:
// 實例化User對象
$User = M("User");
// 獲取status為1的用戶的昵稱列表(昵稱數組)
$nickname = $User->where('status=1')->getField('nickname', true);
// 返回數據格式如array('小明', '張三', '李四')一維數組,其中 value 就是 nickname 列的每行的值
第二個參數傳入了true,返回的nickname則是一個數組,包含了所有滿足條件的昵稱列表。
如果需要限制返回結果數量,可以使用:
$nickname = $User->where('status=1')->getField('nickname', 8);
或者
$nickname = $User->where('status=1')->limit(8)->getField('nickname', true);
獲取 2 個字段列表
如果希望獲取滿足條件的 id 和 昵稱 列表,則可以使用:
// 實例化User對象
$User = M("User");
// 獲取status為1的用戶的昵稱列表
$nickname = $User->where('status=1')->getField('id,nickname');
// 兩個字段的情況下返回的是 array('id' => 'nickname')的關聯數組,以 id 的值為 key,nickname 字段值為 value
如果 getField() 方法傳入多個字段名稱的話,默認返回一個關聯數組,以第一個字段的值為索引(所以第一個字段要盡量選擇不會重復的)。
也可以限制返回數量,例如:
$nickname = $User->where('status=1')->getField('id,nickname',8);
或者
$nickname = $User->where('status=1')->limit(8)->getField('id,nickname');
獲取多個字段列表
如果傳入了 2 個以上的字段名,則返回一個二維數組(類似select() 方法的返回值,區別在於索引是二維數組的鍵名是第一個字段的值),例如:
$result = $User->where('status=1')->getField('id,nickname,email');
// 返回的數組格式是 array('id' => array('id' => value, 'nickname' => value, 'email' => value)),
// 是一個二維數組,key 還是 id 字段的值,但 value 是整行的 array 數組,
// 類似於 select()方法的結果遍歷將 id 的值設為數組 key
如果不希望返回二維數組,可以使用連接符,例如:
$result = $User->where('status=1')->getField('id,nickname,email','|');
那么返回的結果則是一個索引數組,鍵名是 id 值,鍵值則是 nickname|email 連接組成的字符串。
getField() 方法通常還可以配合連貫操作 where()、limit()、order() 等一起使用。還有一些高級的用法,包括對 join 表的支持和 sql 方法的支持等。
select() 使用技巧
查詢結果索引化
$result = $User->where('status=1')->select(array('index' => 'id'));
// 遍歷結果,將 id 的值設為數組 key,如下所示
array(
'1' => array(
'id' => 1,
'nickname' => '小明',
'email' => 'xiaoming@163.com',
'age' => 9
),
'2' => array(
'id' => 2,
'nickname' => '張三',
'email' => 'zhangsan@163.com',
'age' => 26
),
'3' => array(
'id' => 3,
'nickname' => '李四',
'email' => 'lisi@163.com',
'age' => 26
)
);
