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 09 PHP
解析php中memcache的应用
Jun 18 PHP
PHP 关于访问控制的和运算符优先级介绍
Jul 08 PHP
PHP加密函数 Javascript/Js 解密函数
Sep 23 PHP
ThinkPHP多表联合查询的常用方法
Mar 24 PHP
phpmailer发送邮件之后,返回收件人是否阅读了邮件的方法
Jul 19 PHP
PHP 读取和编写 XML
Nov 19 PHP
PHP文件缓存类示例分享
Jan 30 PHP
用PHP生成excel文件到指定目录
Jun 22 PHP
PHP中如何判断exec函数执行成功?
Aug 04 PHP
php简单统计中文个数的方法
Sep 30 PHP
Yii2.0框架模型多表关联查询示例
Jul 18 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 5.0对象模型深度探索之绑定
2006/09/05 PHP
php5.2的curl-bug 服务器被php进程卡死问题排查
2016/09/19 PHP
Thinkphp5.0 框架Model模型简单用法分析
2019/10/11 PHP
ext实现完整的登录代码
2008/08/08 Javascript
javascript XMLHttpRequest对象全面剖析
2010/04/24 Javascript
表单切换,用回车键替换Tab健(不支持IE)
2011/07/20 Javascript
重构Javascript代码示例(重构前后对比)
2013/01/23 Javascript
Ajax异步提交表单数据的说明及方法实例
2013/06/22 Javascript
JS获取各种宽度、高度的简单介绍
2014/12/19 Javascript
jQuery中hasClass()方法用法实例
2015/01/06 Javascript
Javascript基础教程之if条件语句
2015/01/18 Javascript
javascript实现倒计时(精确到秒)
2015/06/26 Javascript
Flow之一个新的Javascript静态类型检查器
2015/12/21 Javascript
浅析jquery数组删除指定元素的方法:grep()
2016/05/19 Javascript
浅谈js构造函数的方法与原型prototype
2016/07/04 Javascript
AngularJS 作用域详解及示例代码
2016/08/17 Javascript
jquery获取transform里的值实现方法
2017/12/12 jQuery
js 获取本周、上周、本月、上月、本季度、上季度的开始结束日期
2020/02/01 Javascript
[01:34]2016国际邀请赛中国区预选赛IG战队教练采访
2016/06/27 DOTA
详解python 发送邮件实例代码
2016/12/22 Python
python项目对接钉钉SDK的实现
2019/07/15 Python
python 非线性规划方式(scipy.optimize.minimize)
2020/02/11 Python
python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法
2020/02/26 Python
PyCharm GUI界面开发和exe文件生成的实现
2020/03/04 Python
Python中logging日志的四个等级和使用
2020/11/17 Python
New Balance波兰官方商城:始于1906年,百年慢跑品牌
2017/08/15 全球购物
英国复古服装购物网站:Collectif
2019/10/30 全球购物
值传递还是引用传递
2015/02/08 面试题
检察官就职演讲稿
2014/01/13 职场文书
大学自主招生自荐信范文
2014/02/26 职场文书
2014年幼儿园植树节活动方案
2014/03/02 职场文书
2014年最新离婚协议书范本
2014/10/11 职场文书
个人投资合作协议书
2014/10/12 职场文书
2014年党建工作汇报材料
2014/10/27 职场文书
vue3种table表格选项个数的控制方法
2022/04/14 Vue.js
ubuntu端向日葵键盘输入卡顿问题及解决
2022/12/24 Servers