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缩略图生成程式(需要GD库支持)
Mar 06 PHP
php下通过POST还是GET来传值
Jun 05 PHP
新安装的MySQL数据库需要注意的安全知识
Jul 30 PHP
PHP系列学习之日期函数使用介绍
Aug 18 PHP
php中使用key,value,current,next和prev函数遍历数组的方法
Mar 17 PHP
php实现比较全的数据库操作类
Jun 18 PHP
php结合正则获取字符串中数字
Jun 19 PHP
PHP使用Pear发送邮件(Windows环境)
Jan 05 PHP
基于Codeigniter框架实现的student信息系统站点动态发布功能详解
Mar 23 PHP
PHP+jQuery实现滚屏无刷新动态加载数据功能详解
May 04 PHP
PHP Post获取不到非表单数据的问题解决办法
Feb 27 PHP
Laravel使用swoole实现websocket主动消息推送的方法介绍
Oct 20 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
JAVA/JSP学习系列之七
2006/10/09 PHP
PHP SEO优化之URL优化方法
2011/04/21 PHP
php命名空间学习详解
2014/02/27 PHP
thinkphp备份数据库的方法分享
2015/01/04 PHP
Laravel 5.5官方推荐的Nginx配置学习教程
2017/10/06 PHP
JavaScript编程中实现对象封装特性的实例讲解
2016/06/24 Javascript
js实现定时进度条完成后切换图片
2017/01/04 Javascript
AngularJS实现自定义指令及指令配置项的方法
2017/11/20 Javascript
详解webpack之scss和postcss-loader的配置
2018/01/09 Javascript
如何实现双向绑定mvvm的原理实现
2019/05/28 Javascript
解决layer弹出层自适应页面大小的问题
2019/09/16 Javascript
JS Thunk 函数的含义和用法实例总结
2020/04/08 Javascript
[03:34]2014DOTA2西雅图国际邀请赛 淘汰赛7月15日TOPPLAY
2014/07/15 DOTA
Python Mysql数据库操作 Perl操作Mysql数据库
2009/01/12 Python
python通过ftplib登录到ftp服务器的方法
2015/05/08 Python
Python中用于检查英文字母大写的isupper()方法
2015/05/19 Python
Python 实现 贪吃蛇大作战 代码分享
2016/09/07 Python
ubuntu中配置pyqt4环境教程
2017/12/27 Python
对Python 3.2 迭代器的next函数实例讲解
2018/10/18 Python
浅谈Python中eval的强大与危害
2019/03/13 Python
python tkinter控件布局项目实例
2019/11/04 Python
pyenv虚拟环境管理python多版本和软件库的方法
2019/12/26 Python
python 装饰器功能与用法案例详解
2020/03/06 Python
python入门教程之基本算术运算符
2020/11/13 Python
Python使用tkinter制作在线翻译软件
2021/02/22 Python
工作中个人的自我评价
2013/12/31 职场文书
人事科岗位职责范本
2014/03/02 职场文书
交通事故协议书范本
2014/11/18 职场文书
2014年幼儿园小班工作总结
2014/12/04 职场文书
公司安全管理制度范本
2015/08/05 职场文书
党员干部学习心得体会
2016/01/23 职场文书
Matplotlib绘制混淆矩阵的实现
2021/05/27 Python
浅谈Redis的keys命令到底有多慢
2021/10/05 Redis
浅谈mysql哪些情况会导致索引失效
2021/11/20 MySQL
使用 Apache 反向代理的设置技巧
2022/01/18 Servers
JS实现刷新网页后之前浏览位置保持不变示例详解
2022/08/14 Javascript