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 03 PHP
一个简单的PHP投票程序源码
Mar 11 PHP
yii框架中的Url生产问题小结
Jan 16 PHP
php中将html中的br换行符转换为文本输入中的换行符
Mar 26 PHP
php获取数组长度的方法(有实例)
Oct 27 PHP
推荐一本PHP程序猿都应该拜读的书
Dec 31 PHP
Yii中CGridView禁止列排序的设置方法
Jul 12 PHP
PHP用户注册邮件激活账户的实现代码
May 31 PHP
Laravel5.5以下版本中如何自定义日志行为详解
Aug 01 PHP
PHP读取目录树的实现方法分析
Mar 22 PHP
php常用字符串查找函数strstr()与strpos()实例分析
Jun 21 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
Feb 27 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水印技术
2007/02/14 PHP
PHP中的按位与和按位或操作示例
2014/01/27 PHP
JavaScript 的继承
2011/10/01 Javascript
JavaScript子窗口ModalDialog中操作父窗口对像
2012/12/11 Javascript
利用javascript实现全部删或清空所选的操作
2014/05/27 Javascript
js实现获取焦点后光标在字符串后
2014/09/17 Javascript
jQuery浏览器CSS3特写兼容实例
2015/01/19 Javascript
AngularJS指令详解及示例代码
2016/08/16 Javascript
Bootstrap基本组件学习笔记之分页(12)
2016/12/08 Javascript
JS出现失效的情况总结
2017/01/20 Javascript
实例详解BootStrap的动态模态框及静态模态框
2018/08/13 Javascript
zepto.js 实时监听输入框的方法
2018/12/04 Javascript
django接入新浪微博OAuth的方法
2015/06/29 Python
python中pygame针对游戏窗口的显示方法实例分析(附源码)
2015/11/11 Python
python psutil库安装教程
2018/03/19 Python
Python-OpenCV基本操作方法详解
2018/04/02 Python
Python 循环语句之 while,for语句详解
2018/04/23 Python
pytorch + visdom CNN处理自建图片数据集的方法
2018/06/04 Python
Python键盘输入转换为列表的实例
2018/06/23 Python
python字符串查找函数的用法详解
2019/07/08 Python
OpenCV里的imshow()和Matplotlib.pyplot的imshow()的实现
2019/11/25 Python
python 浅谈serial与stm32通信的编码问题
2019/12/18 Python
tensorflow之并行读入数据详解
2020/02/05 Python
Python3 hashlib密码散列算法原理详解
2020/03/30 Python
pandas.DataFrame.drop_duplicates 用法介绍
2020/07/06 Python
英国口碑最好的的维他命胶囊品牌:Myvitamins(有中文站)
2016/12/03 全球购物
美国性感女装网站:bebe
2017/03/04 全球购物
来自南加州灵感的工作和娱乐服装:TravisMathew
2019/05/01 全球购物
澳大利亚购买健身器材网站:Gym Direct
2019/12/19 全球购物
求职信格式范本
2013/11/15 职场文书
餐饮加盟计划书
2014/01/10 职场文书
农村党支部承诺书
2015/04/30 职场文书
2015年社区宣传工作总结
2015/05/20 职场文书
幼儿园大班开学寄语(2015秋季)
2015/05/27 职场文书
2019银行竞聘书
2019/06/21 职场文书
python playwright之元素定位示例详解
2022/07/23 Python