ThinkPHP 模型方法 getField() 和 select() 使用技巧


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
    )
);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM