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 error_log 函数的使用
Apr 13 PHP
PHP中对用户身份认证实现两种方法
Jun 04 PHP
PHP面向对象概念
Nov 06 PHP
PHP数组及条件,循环语句学习
Nov 11 PHP
整理的一些实用WordPress后台MySQL操作命令
Jan 07 PHP
克隆一个新项目的快捷方式
Apr 10 PHP
取得单条网站评论以数组形式进行输出
Jul 28 PHP
ThinkPHP实现递归无级分类――代码少
Jul 29 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
Dec 21 PHP
thinkPHP5框架中widget的功能与用法详解
Jun 11 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
Apr 02 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数组无限分级数据的层级化处理代码
2012/12/29 PHP
解析dedecms空间迁移步骤详解
2013/05/15 PHP
PHP生成等比缩略图类和自定义函数分享
2014/06/25 PHP
PHP利用header跳转失效的解决方法
2014/10/24 PHP
深入讲解PHP的Yii框架中的属性(Property)
2016/03/18 PHP
yii2中LinkPager增加总页数和总记录数的实例
2017/08/28 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
JavaScript在XHTML中的用法详解
2013/04/11 Javascript
AngularJS入门教程(二):AngularJS模板
2014/12/06 Javascript
javascript实现网站加入收藏功能
2015/12/16 Javascript
Ionic快速安装教程
2016/06/03 Javascript
基于原生JS实现图片裁剪
2016/08/01 Javascript
深究AngularJS中ng-drag、ng-drop的用法
2017/06/12 Javascript
Three.js如何实现雾化效果示例代码
2017/09/27 Javascript
canvas绘制爱心的几种方法总结(推荐)
2017/10/31 Javascript
layui实现文件或图片上传记录
2018/08/28 Javascript
webpack4 处理CSS的方法示例
2018/09/03 Javascript
vue-cli3 项目从搭建优化到docker部署的方法
2019/01/28 Javascript
JS实现点击按钮随机生成可拖动的不同颜色块示例
2019/01/30 Javascript
vue cli3.0 引入eslint 结合vscode使用
2019/05/27 Javascript
使用Vue 实现滑动验证码功能
2019/06/27 Javascript
jQuery利用cookie 实现本地收藏功能(不重复无需多次命名)
2019/11/07 jQuery
数据挖掘之Apriori算法详解和Python实现代码分享
2014/11/07 Python
使用Python的Django框架结合jQuery实现AJAX购物车页面
2016/04/11 Python
python中pandas.DataFrame对行与列求和及添加新行与列示例
2017/03/12 Python
python中logging库的使用总结
2017/10/18 Python
python3爬取数据至mysql的方法
2018/06/26 Python
Python实现监控键盘鼠标操作示例【基于pyHook与pythoncom模块】
2018/09/04 Python
Numpy数组的广播机制的实现
2020/11/03 Python
用CSS3来实现社交分享按钮
2014/11/11 HTML / CSS
医院党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
全国法制宣传日活动总结2014
2014/11/01 职场文书
毕业设计答辩开场白
2015/05/29 职场文书
死亡诗社观后感
2015/06/05 职场文书
演讲稿:态度决定一切
2019/04/02 职场文书
浅谈什么是SpringBoot异常处理自动配置的原理
2021/06/21 Java/Android