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

ThinkPHP 模型方法 getField() 和 select() 使用技巧的更多相关文章

  1. ThinkPHP 模型方法 setInc() 和 setDec() 使用详解

    对于数字字段的加减,可以直接使用 setInc() 与 setDec() 方法 ThinkPHP 内置了对统计数据(数字字段)的更新方法: setInc():将数字字段值增加 setDec():将数字 ...

  2. ThinkPHP 模型方法 setInc() 和 setDec()

    TP 内置了对统计数据(数字字段)的更新方法: setInc():将数字字段值增加 setDec():将数字字段值减少 $User::where('id=5')->setInc('score', ...

  3. (转)ThinkPHP find方法 查询一条数据记录

    find() ThinkPHP find() 方法是和 select() 用法类似的一个方法,不同之处 find() 查询出来的始终只有一条数据,即系统自动加上了 LIMIT 1 限制. 当确认查询的 ...

  4. thinkphp模型中的获取器和修改器(根据字段名自动调用模型中的方法)

    thinkphp模型中的获取器和修改器(根据字段名自动调用模型中的方法) 一.总结 记得看下面 1.获取器的作用是在获取数据的字段值后自动进行处理 2.修改器的作用是可以在数据赋值的时候自动进行转换处 ...

  5. ThinkPHP CURD方法盘点:where方法

    今天来给大家讲下查询最常用但也是最复杂的where方法,where方法也属于模型类的连贯操作方法之一,主要用于查询和操作条件的设置.where方法的用法是ThinkPHP查询语言的精髓,也是Think ...

  6. ThinkPHP CURD方法中field方法详解

    导读:ThinkPHP CURD方法的field方法属于模型的连贯操作方法之一,主要目的是标识要返回或者操作的字段,可以用于查询和写入操作. 1.用于查询在查询操作中field方法是使用最频繁的.$M ...

  7. ThinkPHP模型基础类提供的连贯操作方法

    ThinkPHP模型基础类提供的连贯操作方法(也有些框架称之为链式操作),可以有效的提高数据存取的代码清晰度和开发效率,并且支持所有的CURD操作. 直线电机哪家好 使用也比较简单, 假如我们现在要查 ...

  8. 错误之thinkphp模型使用发生的错误

    刚接触thinkphp模型的创建,在创建model类时在这里边声明了类的对象.唉,这是不理解的错误啊.什么叫做实例化模型对象,在控制器里边使用才创建. 模型这里写各种用到的函数. 这里我也体会到了查询 ...

  9. thinkphp模型层Model、Logic、Service讲解

    thinkphp模型层Model.Logic.Service讲解 时间:2014-08-24 15:54:56   编辑:一切随缘   文章来源:php教程网 已阅读:771 次       js特效 ...

随机推荐

  1. linux串口驱动分析【转】

    转自:http://blog.csdn.net/hanmengaidudu/article/details/11946591 硬件资源及描述 s3c2440A 通用异步接收器和发送器(UART)提供了 ...

  2. python运行execjs解密js

    [转]http://www.knowsky.com/1041161.html python 记一次计算qzonetoken经历 之前用python写了个发表说说的爬虫,但最近发现在post数据时返回不 ...

  3. Python3.6安装OpenCV

    1.安装依赖 pip install --upgrade setuptools pip install numpy Matplotlib -i https://mirrors.aliyun.com/p ...

  4. 《Photoshop智能手机APP界面设计》学习笔记-转

    第一章 APP用户界面基础 1.1 手机UI设计相关基本概念 1.1.1 什么是UI设计 UI(User's Interface)即用户界面,它不仅仅是美化界面,还需要研究用户,让界面变得更友好.简洁 ...

  5. hdu 1213 求连通分量(并查集模板题)

    求连通分量 Sample Input2 //T5 3 //n m1 2// u v2 34 5 5 12 5 Sample Output24 # include <iostream> # ...

  6. Java第三阶段学习(十二、HttpServletRequest与HttpServletResponse)

    一.HttpServletRequest 1.概述: 我们在创建Servlet时会覆盖service()方法,或doGet()/doPost(),这些方法都有两个参数,一个为代表请求的request和 ...

  7. Redux架构

    深入Redux架构   阅读目录 关于redux API 中间件与异步操作 异步操作的基本思路 React-Redux的用法 回到顶部 关于redux 之前写了一篇通过一个demo了解Redux,但对 ...

  8. PHP rabbitmq扩展安装

    转载自: https://www.jianshu.com/p/65490900a937 安装rabbitmq的php扩展 1.安装扩展依赖库##### 注意:扩展是C写的,由于C与RabbitMQ通信 ...

  9. 系统管理员常用的Linux命令

    整理Linux的一些基本系统管理命令作为备忘 ========================================================================= 查看文 ...

  10. [转]c++优先队列(priority_queue)用法详解

    既然是队列那么先要包含头文件#include <queue>, 他和queue不同的就在于我们可以自定义其中数据的优先级, 让优先级高的排在队列前面,优先出队 优先队列具有队列的所有特性, ...