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. Requests中出现大量ASYNC_NETWORK_IO等待

    七夕活动,网页显示异常:504 Gateway Time-out The server didn't respond in time.开发询问数据库是否正常,当时正连接在实例上查询数据,感觉响应确实慢 ...

  2. [转]perf + 火焰图分析程序性能

    1.perf命令简要介绍 性能调优时,我们通常需要分析查找到程序百分比高的热点代码片段,这便需要使用 perf record 记录单个函数级别的统计信息,并使用 perf report 来显示统计结果 ...

  3. Linux中普通用户提权为超级用户

    首先创建一个普通用户,并且给普通用户设置一个密码,保证能用su 命令能用普通用户登录 [root@ahu ~]# useradd test [root@ahu ~]# passwd test New ...

  4. Redis常见操作命令

    1.库相关 select 索引 => 选择库 dbsize => 查询当前库中Key的数量 flushdb => 清空当前库 flushall => 清空所有库(建议不要用,除 ...

  5. MYSQL 的 MASTER到MASTER的主主循环同步

    MYSQL 的 MASTER到MASTER的主主循环同步   刚刚抽空做了一下MYSQL的主主同步.把步骤写下来,至于会出现的什么问题,以后随时更新.这里我同步的数据库是TEST1.环境描述.   主 ...

  6. elasticsearch(ES)日志迁移

    =============================================== 2018/7/29_第1次修改                       ccb_warlock == ...

  7. **linux实用命令之如何移动文件夹及文件下所有文件

    http://www.linuxde.net/2013/02/12448.html 格式: mv [选项(option)] 源文件或目录 目标文件或目录 使用命令: mv webdata /bin/u ...

  8. 在k8s集群中,利用prometheus的jmx_exporter进行tomcat的JVM性能监控,并用grafana作前端展示

    查找了很多文档,没有完全达到我要求的, 于是,作了一定的调整,成现在这样. 操作步骤如下: 一,准备好两个文件. jmx_prometheus_javaagent-0.3.1.jar jmx_expo ...

  9. Spring AOP实现原理-动态代理

    目录 代理模式 静态代理 动态代理 代理模式 我们知道,Spring AOP的主要作用就是不通过修改源代码的方式.将非核心功能代码织入来实现对方法的增强.那么Spring AOP的底层如何实现对方法的 ...

  10. Nginx+redis的Asp.net

    基于Nginx+redis的Asp.net站点搭建   剧情介绍 在传统的信息系统(比如小规模的ERP\MES系统),往往只是进行简单的应用服务器和数据库服务器的分布式部署,以此来提高应用系统的负载能 ...