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. 第12月第15天 mysqlx boost reswift

    1. INSTALL PLUGIN mysqlx SONAME 'mysqlx.so' https://yq.aliyun.com/articles/38288 2. boost boost::sha ...

  2. 普通用户修改root密码【转】

    在普通用户下修改root用户密码 1 从普通用户切换到root用户  sudo -s  再输入密码.2 输入passwd ,会提醒你输入当前用户密码,验证后会提醒你输入root用户密码.3 切换到ro ...

  3. Unity 网格 绘制

    网格绘制主要用是对Mesh进行操作,通过对vertex和triangles进行操作生成对应的面片: 这里首先得用到一个类:Triangulator(根据vertex生成triangles数组) usi ...

  4. NEERC Southern Subregional 2011

    NEERC Southern Subregional 2011 A - Bonnie and Clyde solution 双指针搞搞就好. 时间复杂度:\(O(n)\) B - Building F ...

  5. selenium用jquery改变元素属性

    一.jQuery 语法 jQuery 语法是通过选取 HTML 元素,并对选取的元素执行某些操作. 1.基础语法: $(selector).action() 选择符(selector)即," ...

  6. 09 Go 1.9 Release Notes

    Go 1.9 Release Notes Introduction to Go 1.9 Changes to the language Ports ppc64x requires POWER8 Fre ...

  7. jquery模型(外壳实现)

    详细解释: 1.现在传入的参数是window,document,可以知道是它俩引用 2. 3. 4.每次调用jquery方法,都会创建一个实例,但是内存并没有暴涨,原因是:jquery里面new 的这 ...

  8. Extjs Window用法详解 2 打印具体应用

    Extjs 中的按钮元素 { xtype: 'buttongroup', title: '打印', items: [ me.tsbDel = Ext.create('Ext.button.Button ...

  9. /etc/sysconfig/network-scripts/下文件介绍

    我们先查看一下 [root@tpwb network-scripts]# ls ifcfg-eth0      ifdown-ipv6  ifup-aliases  ifup-plip    ifup ...

  10. node 使用笔记

    1 安装 buffertools 因为使用mjpeg-proxy的关系,需要编译buffertools中的C++代码文件,怎奈何一直出错. make: Entering directory `/srv ...