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通用分页类page.php[仿google分页]
Aug 31 PHP
PHP 长文章分页函数 带使用方法,不会分割段落,翻页在底部
Oct 22 PHP
PHP获取文件绝对路径的代码(上一级目录)
May 29 PHP
解析php中eclipse 用空格替换 tab键
Jun 24 PHP
php实现数组按指定KEY排序的方法
Mar 30 PHP
解决nginx不支持thinkphp中pathinfo的问题
Jul 21 PHP
使用PHP实现微信摇一摇周边红包
Jan 04 PHP
PHP微信开发之微信消息自动回复下所遇到的坑
May 09 PHP
PHP实现清除MySQL死连接的方法
Jul 23 PHP
Smarty模板常见的简单应用分析
Nov 15 PHP
PHP 99乘法表的几种实现代码
Oct 13 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
在PHP中使用Sockets 从Usenet中获取文件
2008/01/10 PHP
php curl的深入解析
2013/06/02 PHP
php使用cookie显示用户上次访问网站日期的方法
2015/01/26 PHP
php中将一个对象保存到Session中的方法
2015/03/13 PHP
php中JSON的使用方法
2015/04/30 PHP
PHP析构函数destruct与垃圾回收机制的讲解
2019/03/22 PHP
对setInterval在火狐和chrome切换标签产生奇怪的效果之探索,与解决方案!
2011/10/29 Javascript
可编辑下拉框的2种实现方式
2014/06/13 Javascript
JQuery+Ajax实现数据查询、排序和分页功能
2015/09/27 Javascript
JS对HTML表格进行增删改操作
2016/08/22 Javascript
基于jQuery实现一个marquee无缝滚动的插件
2017/03/09 Javascript
Angular 4.x中表单Reactive Forms详解
2017/04/25 Javascript
node.js中http模块和url模块的简单介绍
2017/10/06 Javascript
angularjs实现猜大小功能
2017/10/23 Javascript
jQuery基于闭包实现的显示与隐藏div功能示例
2018/06/09 jQuery
基于React Native 0.52实现轮播图效果
2020/08/25 Javascript
如何在vue项目中嵌入jsp页面的方法(2种)
2020/02/06 Javascript
JS array数组检测方式解析
2020/05/19 Javascript
H5+css3+js搭建带验证码的登录页面
2020/10/11 Javascript
Python程序退出方式小结
2017/12/09 Python
详解python字节码
2018/02/07 Python
Tensorflow实现AlexNet卷积神经网络及运算时间评测
2018/05/24 Python
Python模块的加载讲解
2019/01/15 Python
不归路系列:Python入门之旅-一定要注意缩进!!!(推荐)
2019/04/16 Python
Python 闭包,函数分隔作用域,nonlocal声明非局部变量操作示例
2019/10/14 Python
python小程序之4名牌手洗牌发牌问题解析
2020/05/15 Python
巴黎卡诗美国官方网站:始于1964年的头发头皮护理专家
2017/07/10 全球购物
荷兰街头时尚之家:Funkie House
2019/03/18 全球购物
澳大利亚设计的优质鞋类和适合澳大利亚生活方式的服装:Rivers
2019/04/23 全球购物
中学生在校期间的自我评价分享
2013/11/13 职场文书
给全校老师的建议书
2014/03/13 职场文书
4s店市场专员岗位职责
2014/04/09 职场文书
先进党支部事迹材料
2014/12/24 职场文书
担保书格式
2015/01/20 职场文书
质量负责人岗位职责
2015/02/15 职场文书
个人政治思想总结
2015/03/05 职场文书