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开发入门教程之面向对象
Dec 05 PHP
mysql 全文搜索 技巧
Apr 27 PHP
php 启动报错如何解决
Jan 17 PHP
ThinkPHP采用原生query实现关联查询left join实例
Dec 02 PHP
php获取图片信息的方法详解
Dec 10 PHP
PHP解压tar.gz格式文件的方法
Feb 14 PHP
php支持断点续传、分块下载的类
May 02 PHP
浅谈php数组array_change_key_case() 函数和array_chunk()函数
Oct 22 PHP
PHP实现的简单排列组合算法应用示例
Jun 20 PHP
浅谈关于PHP解决图片无损压缩的问题
Sep 01 PHP
PHP实现带进度条的Ajax文件上传功能示例
Jul 02 PHP
YII2 全局异常处理深入讲解
Mar 24 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
一个符号插入器 中用到的js代码
2007/09/04 Javascript
javascript的trim,ltrim,rtrim自定义函数
2008/09/21 Javascript
模拟多级复选框效果的jquery代码
2013/08/13 Javascript
js判读浏览器是否支持html5的canvas的代码
2013/11/18 Javascript
jquery 动态增加删除行的简单实例(推荐)
2016/10/12 Javascript
jQuery弹出div层过2秒自动消失
2016/11/29 Javascript
jQuery实现复制到粘贴板功能
2017/02/11 Javascript
JavaScript数据结构之广义表的定义与表示方法详解
2017/04/12 Javascript
Node.js利用js-xlsx处理Excel文件的方法详解
2017/07/05 Javascript
vue配置请求本地json数据的方法
2018/04/11 Javascript
详解如何构建Promise队列实现异步函数顺序执行
2018/10/23 Javascript
解决vue单页面应用进入页面加载所有 js 的问题
2020/08/12 Javascript
jQuery实现增删改查
2020/12/22 jQuery
Python中getpass模块无回显输入源码解析
2018/01/11 Python
Python Matplotlib实现三维数据的散点图绘制
2019/03/19 Python
python实现微信定时每天和女友发送消息
2019/04/29 Python
pytorch实现建立自己的数据集(以mnist为例)
2020/01/18 Python
Python如何把Spark数据写入ElasticSearch
2020/04/18 Python
Python如何使用正则表达式爬取京东商品信息
2020/06/01 Python
利用python对excel中一列的时间数据更改格式操作
2020/07/14 Python
Python中三维坐标空间绘制的实现
2020/09/22 Python
python 输入字符串生成所有有效的IP地址(LeetCode 93号题)
2020/10/15 Python
python math模块的基本使用教程
2021/01/16 Python
python爬虫线程池案例详解(梨视频短视频爬取)
2021/02/20 Python
整理HTML5中支持的URL编码与字符编码
2016/02/23 HTML / CSS
Canvas实现保存图片到本地的示例代码
2018/06/28 HTML / CSS
员工工作表扬信范文
2014/01/13 职场文书
劳动之星获奖感言
2014/02/01 职场文书
尊老爱幼演讲稿
2014/09/04 职场文书
2014年党员自我评议总结
2014/09/23 职场文书
教师个人事迹材料
2014/12/17 职场文书
2015年组织委员工作总结
2015/04/23 职场文书
计算机教师工作总结
2015/08/13 职场文书
导游词之江南园林狮子林
2019/09/16 职场文书
python之基数排序的实现
2021/07/26 Python
使用CSS实现音波加载效果
2023/05/07 HTML / CSS