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 相关文章推荐
Wordpress php 分页代码
Oct 21 PHP
PHP分页函数代码(简单实用型)
Dec 02 PHP
PHP开发框架kohana中处理ajax请求的例子
Jul 14 PHP
PHP通过内置函数memory_get_usage()获取内存使用情况
Nov 20 PHP
php include类文件超时问题处理
Feb 06 PHP
Yii学习总结之安装配置
Feb 22 PHP
PHP入门教程之面向对象的特性分析(继承,多态,接口,抽象类,抽象方法等)
Sep 11 PHP
PHP经典算法集锦【经典收藏】
Sep 14 PHP
TP3.2批量上传文件或图片 同名冲突问题的解决方法
Aug 01 PHP
PHP模版引擎原理、定义与用法实例
Mar 29 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
Aug 13 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验证码类(分享)
2013/08/06 PHP
PHP YII框架开发小技巧之模型(models)中rules自定义验证规则
2015/11/16 PHP
PHP rmdir()函数的用法总结
2019/07/02 PHP
多浏览器兼容的获取元素和鼠标的位置的js代码
2009/12/15 Javascript
js 内存释放问题
2010/04/25 Javascript
ajax的hide隐藏问题解决方法
2012/12/11 Javascript
21个值得收藏的Javascript技巧
2014/02/04 Javascript
Ajax局部更新导致JS事件重复触发问题的解决方法
2014/10/14 Javascript
微信JSSDK上传图片
2015/08/23 Javascript
JavaScript中的this,call,apply使用及区别详解
2016/01/29 Javascript
15个值得开发人员关注的jQuery开发技巧和心得总结【经典收藏】
2016/05/25 Javascript
扩展Bootstrap Tooltip插件使其可交互的方法
2016/11/07 Javascript
JS实现的简单轮播图运动效果示例
2016/12/22 Javascript
canvas红包照片实例分享
2017/02/28 Javascript
Angularjs的启动过程分析
2017/07/18 Javascript
vue.js根据代码运行环境选择baseurl的方法
2018/02/28 Javascript
详解webpack模块化管理和打包工具
2018/04/21 Javascript
详解Angular5路由传值方式及其相关问题
2018/04/28 Javascript
微信小程序 Animation实现图片旋转动画示例
2018/08/22 Javascript
查看Django和flask版本的方法
2018/05/14 Python
pandas read_excel()和to_excel()函数解析
2019/09/19 Python
pycharm如何实现跨目录调用文件
2020/02/28 Python
使用IPython或Spyder将省略号表示的内容完整输出
2020/04/20 Python
Ubuntu20下的Django安装的方法步骤
2021/01/24 Python
IRO美国官网:法国服装品牌
2018/03/06 全球购物
会计顶岗实习心得
2014/01/25 职场文书
草船借箭教学反思
2014/02/03 职场文书
小学生暑假感言
2014/02/06 职场文书
信息与计算科学专业推荐信
2014/02/23 职场文书
2014教师党员自我评议总结
2014/09/19 职场文书
上课睡觉万能检讨书
2015/02/17 职场文书
2015社区爱国卫生工作总结
2015/04/21 职场文书
电影红河谷观后感
2015/06/11 职场文书
正规欠条模板
2015/07/03 职场文书
「回转企鹅罐」10周年纪念展「輪るピングドラム展」海报公开
2022/03/22 日漫
Python使用Web框架Flask开发项目
2022/06/01 Python