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分页示例代码
Mar 19 PHP
php生成二维码的几种方式整理及使用实例
Jun 03 PHP
邮箱正则表达式实现代码(针对php)
Jun 21 PHP
php增删改查示例自己写的demo
Sep 04 PHP
PHP实现批量修改文件后缀名的方法
Jul 30 PHP
php的api数据接口书写实例(推荐)
Sep 22 PHP
iOS自定义提示弹出框实现类似UIAlertView的效果
Nov 16 PHP
php批量删除操作(数据访问)
May 23 PHP
php类自动装载、链式操作、魔术方法实现代码
Jul 23 PHP
tp5(thinkPHP5)框架数据库Db增删改查常见操作总结
Jan 10 PHP
Thinkphp集成抖音SDK的实现方法
Apr 28 PHP
php将字符串转换为数组实例讲解
May 05 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 动态随机生成验证码类代码
2010/04/09 PHP
php中mail函数发送邮件失败的解决方法
2014/12/24 PHP
nginx+thinkphp下解决不支持pathinfo模式
2015/07/01 PHP
php断点续传之文件分割合并详解
2016/12/13 PHP
Yii 使用intervention/image拓展实现图像处理功能
2019/06/22 PHP
Prototype1.6 JS 官方下载地址
2007/11/30 Javascript
javascript多种数据类型表格排序代码分析
2010/09/11 Javascript
表单切换,用回车键替换Tab健(不支持IE)
2011/07/20 Javascript
Javascript仿PHP $_GET获取URL中的参数
2014/05/12 Javascript
javascript设置和获取cookie的方法实例详解
2016/01/05 Javascript
动态加载JavaScript文件的两种方法
2016/04/22 Javascript
jquery层级选择器(匹配父元素下的子元素实现代码)
2016/09/05 Javascript
JavaScript学习笔记整理_关于表达式和语句
2016/09/19 Javascript
layui分页效果实现代码
2017/05/19 Javascript
利用node.js如何搭建一个简易的即时响应服务器
2017/05/28 Javascript
Angular2+国际化方案(ngx-translate)的示例代码
2017/08/23 Javascript
vue实现移动端图片上传功能
2019/12/23 Javascript
[01:17]炒鸡美酒第四天TA暴走
2018/06/05 DOTA
[01:02:05]LGD vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
在 Django/Flask 开发服务器上使用 HTTPS
2014/07/03 Python
python多重继承实例
2014/10/11 Python
python用10行代码实现对黄色图片的检测功能
2015/08/10 Python
Python编写合并字典并实现敏感目录的小脚本
2019/02/26 Python
python函数修饰符@的使用方法解析
2019/09/02 Python
python numpy库linspace相同间隔采样的实现
2020/02/25 Python
如何通过Python实现RabbitMQ延迟队列
2020/11/28 Python
CSS3教程(6):创建网站多列
2009/04/02 HTML / CSS
css3的过滤效果简单实例
2016/08/03 HTML / CSS
美国成衣女装品牌:CHICO’S
2016/09/19 全球购物
The Hut美国/加拿大:英国领先的豪华在线百货商店
2019/03/26 全球购物
合伙协议书
2014/04/23 职场文书
代办社保委托书范文
2014/10/06 职场文书
南湾猴岛导游词
2015/02/09 职场文书
技能培训通讯稿
2015/07/18 职场文书
导游词之晋城蟒河
2019/12/12 职场文书
python实战之90行代码写个猜数字游戏
2021/04/22 Python