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简洁函数小结
Aug 12 PHP
Php图像处理类代码分享
Jan 19 PHP
php笔记之:初探PHPcms模块开发介绍
Apr 26 PHP
使用Curl进行抓取远程内容时url中文编码问题示例探讨
Oct 29 PHP
根据中文裁减字符串函数的php代码
Dec 03 PHP
php页面缓存方法小结
Jan 10 PHP
php实现字符串首字母大写和单词首字母大写的方法
Mar 14 PHP
php使用CURL模拟GET与POST向微信接口提交及获取数据的方法
Sep 23 PHP
PHP使用redis消息队列发布微博的方法示例
Jun 22 PHP
PHP实现将标点符号正则替换为空格的方法
Aug 09 PHP
php-fpm重启导致的程序执行中断问题详解
Apr 29 PHP
php学习笔记之字符串常见操作总结
Jul 16 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中文本数据翻页(留言本翻页)
2006/10/09 PHP
PHP常用技巧总结(附函数代码)
2012/02/04 PHP
神盾加密解密教程(三)PHP 神盾解密工具
2014/06/08 PHP
Yii2 hasOne(), hasMany() 实现三表关联的方法(两种)
2017/02/15 PHP
PHP jQuery+Ajax结合写批量删除功能
2017/05/19 PHP
PHP简单实现二维数组赋值与遍历功能示例
2017/10/19 PHP
PHP children()函数讲解
2019/02/03 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
JQuery 浮动导航栏实现代码
2009/08/27 Javascript
HTML5附件拖拽上传drop & google.gears实现代码
2011/04/28 Javascript
使用JavaScript动态设置样式实现代码(2)
2013/01/25 Javascript
jQuery中fadeIn、fadeOut、fadeTo的使用方法(图片显示与隐藏)
2013/05/08 Javascript
Jquery使用Firefox FireBug插件调试Ajax步骤讲解
2013/12/02 Javascript
JavaScript学习笔记(三):JavaScript也有入口Main函数
2015/09/12 Javascript
Nodejs实战心得之eventproxy模块控制并发
2015/10/27 NodeJs
通过jquery实现页面的动画效果(实例代码)
2016/09/18 Javascript
解决angularjs中同步执行http请求的方法
2018/08/13 Javascript
JavaScript命名空间模式实例详解
2019/06/20 Javascript
Node.js API详解之 dns模块用法实例分析
2020/05/15 Javascript
python爬虫教程之爬取百度贴吧并下载的示例
2014/03/07 Python
python实现自主查询实时天气
2018/06/22 Python
python实践项目之监控当前联网状态详情
2019/05/23 Python
Python修改列表值问题解决方案
2020/03/06 Python
Python基于requests实现模拟上传文件
2020/04/21 Python
keras实现多GPU或指定GPU的使用介绍
2020/06/17 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
2020/09/21 Python
Python操作word文档插入图片和表格的实例演示
2020/10/25 Python
英国领先的在线鱼贩:The Fish Society
2020/08/12 全球购物
体育教师工作总结的自我评价
2013/10/10 职场文书
创业计划书怎样才能打动风投
2014/01/01 职场文书
4s店活动策划方案
2014/08/25 职场文书
大学毕业生管理学求职信
2014/09/01 职场文书
被委托人身份证明
2015/08/07 职场文书
2016国培研修心得体会
2016/01/08 职场文书
用python实现监控视频人数统计
2021/05/21 Python
Linux安装apache服务器的配置过程
2021/11/27 Servers