ThinkPHP CURD方法之field方法详解


Posted in PHP onJune 18, 2014

ThinkPHP CURD方法的field方法属于模型的连贯操作方法之一,主要目的是标识要返回或者操作的字段,可以用于查询和写入操作。

1、用于查询

在查询操作中field方法是使用最频繁的。

$Model->field('id,title,content')->select();

这里使用field方法指定了查询的结果集中包含id,title,content三个字段的值。执行的SQL相当于:

SELECT id,title,content FROM table

当然,除了select方法之外,所有的查询方法,包括find等都可以使用field方法,这里只是以select为例说明。
上面的例子也可以使用数组代替:

$Model->field(array('id','title','content'))->select();

最终执行的SQL和上面等效。

似乎看起来数组的用法过于复杂,不过先别下这个结论,后面就会明白数组用法的好处了。
数组方式的定义可以为某些字段定义别名,例如:

$Model->field(array('id','title'=>'name','content'))->select();

执行的SQL相当于:

SELECT id,title as name,content FROM table

如果你希望直接使用:

$Model->field('id,title as name,content')->select();

可能会得到错误的结果。
对于一些更复杂的字段要求,数组的优势则更加明显,例如:

$Model->field(array('id','concat(name,'-',id)'=>'truename','LEFT(title,7)'=>'sub_title'))->select();

执行的SQL相当于:

SELECT id,concat(name,'-',id) as truename,LEFT(title,7) as sub_title FROM table

想必大家都明白了,对于需要在field中使用SQL函数的情况,数组方式可以很好的解决。
是不是field方法就这么点作用了呢?如果你这么认为,那就太低估ThinkPHP的field方法了,ThinkPHP考虑的细节远比你想象的要周到。

先看下面的情况,如果有一个表有非常多的字段,而且有两个需求,首先要求需要获取所有的字段,这个也许很简单,因为不调用field方法或者直接使用空的field方法都能做到,事实上,的确如此:

$Model->select();
$Model->field()->select();
$Model->field('*')->select();

上面三个用法是等效的,都相当于执行SQL:

SELECT * FROM table

但是这并不是我说的获取所有字段,我希望显式的调用所有字段(对于对性能要求比较高的系统,这个要求并不过分,起码是一个比较好的习惯),那么OK,仍然很简单,下面的用法可以完成预期的作用:

$Model->field(true)->select();

fied(true)的用法会显式的获取数据表的所有字段列表,哪怕你的数据表有100个字段。
第二个需求是我希望获取排除content字段(文本字段的值非常耗内存)之外的所有字段值,我们就可以使用field方法的排除功能,例如下面的方式就可以实现所说的功能:

$Model->field('content',true)->select();

要排除更多的字段也可以:

$Model->field('user_id,content',true)->select();
 //或者用
$Model->field(array('user_id','content'),true)->select();

2、用于写入

除了查询操作之外,field方法还有一个非常重要的安全功能--字段合法性检测(注意:该功能3.1版本开始才能支持)。field方法结合create方法使用就可以完成表单提交的字段合法性检测,如果我们在表单提交的处理方法中使用了:

$Model->field('title,email,content')->create();

即表示表单中的合法字段只有title,email和content字段,无论用户通过什么手段更改或者添加了浏览器的提交字段,都会直接屏蔽。因为,其他的所有字段我们都不希望由用户提交来决定,你可以通过自动完成功能定义额外的字段写入。

PHP 相关文章推荐
PHP禁止页面缓存的代码
Oct 23 PHP
php 获取百度的热词数据的代码
Feb 18 PHP
调整PHP的性能
Oct 30 PHP
php合并数组中相同元素的方法
Nov 13 PHP
php异步多线程swoole用法实例
Nov 14 PHP
php实现指定字符串中查找子字符串的方法
Mar 17 PHP
PHP使用preg_split和explode分割textarea存放内容的方法分析
Jul 03 PHP
thinkPHP中钩子的使用方法实例分析
Nov 16 PHP
php微信公众号开发之二级菜单
Oct 20 PHP
YII框架页面缓存操作示例
Apr 29 PHP
laravel 使用事件系统统计浏览量的实现
Oct 16 PHP
2020最新版 PhpStudy V8.1版本下载安装使用详解
Oct 30 PHP
ThinkPHP CURD方法之data方法详解
Jun 18 #PHP
ThinkPHP CURD方法之order方法详解
Jun 18 #PHP
ThinkPHP CURD方法之table方法详解
Jun 18 #PHP
ThinkPHP CURD方法之page方法详解
Jun 18 #PHP
ThinkPHP CURD方法之limit方法详解
Jun 18 #PHP
ThinkPHP CURD方法之where方法详解
Jun 18 #PHP
ThinkPHP Mobile使用方法简明教程
Jun 18 #PHP
You might like
如何开始收听短波广播
2021/03/01 无线电
php自动识别文件编码并转换为UTF-8的方法
2014/06/12 PHP
隐性调用php程序的方法
2015/06/13 PHP
thinkPHP框架实现生成条形码的方法示例
2018/06/06 PHP
关于PHP5.6+版本“No input file specified”问题的解决
2019/12/11 PHP
Javascript匿名函数的一种应用 代码封装
2010/06/27 Javascript
Extjs4.0设置Ext.data.Store传参的请求方式(默认为GET)
2013/04/02 Javascript
jquery submit ie6下失效的原因分析及解决方法
2013/11/15 Javascript
jQuery实现提交按钮点击后变成正在处理字样并禁止点击的方法
2015/03/24 Javascript
微信小程序 开发工具快捷键整理
2016/10/31 Javascript
AngularJS表单提交实例详解
2017/02/18 Javascript
javascript实现数据双向绑定的三种方式小结
2017/03/09 Javascript
基于JavaScript实现滑动门效果
2017/03/16 Javascript
vue 实现数字滚动增加效果的实例代码
2018/07/06 Javascript
NodeJS模块与ES6模块系统语法及注意点详解
2019/01/04 NodeJs
javascript判断一个变量是数组还是对象
2019/04/10 Javascript
Python连接mssql数据库编码问题解决方法
2015/01/01 Python
用Python创建声明性迷你语言的教程
2015/04/13 Python
python的文件操作方法汇总
2017/11/10 Python
Python设计模式之MVC模式简单示例
2018/01/10 Python
对python操作kafka写入json数据的简单demo分享
2018/12/27 Python
基于python实现学生信息管理系统
2019/11/22 Python
Python数据可视化:幂律分布实例详解
2019/12/07 Python
numpy实现神经网络反向传播算法的步骤
2019/12/24 Python
解决springboot yml配置 logging.level 报错问题
2020/02/21 Python
英国领先的杂志订阅网站:Magazine.co.uk
2018/01/25 全球购物
大学生新闻专业个人自我评价
2013/11/12 职场文书
语文教学感言
2014/02/06 职场文书
酒店大堂副理的职责范文
2014/02/13 职场文书
如何写一封打动人心的求职信
2014/02/17 职场文书
《狼和小羊》教学反思
2014/04/20 职场文书
大学生精神文明先进个人事迹材料
2014/05/02 职场文书
政府绩效管理实施方案
2014/05/04 职场文书
党员干部一句话承诺
2014/05/30 职场文书
秋收起义观后感
2015/06/11 职场文书
干部作风纪律整顿心得体会
2016/01/23 职场文书