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 和 MySQL 基础教程(二)
Oct 09 PHP
关于php连接mssql:pdo odbc sql server
Jul 20 PHP
PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
Jun 25 PHP
多个PHP中文字符串截取函数
Nov 12 PHP
php实现扫描二维码根据浏览器类型访问不同下载地址
Oct 15 PHP
php使用cookie实现记住登录状态
Apr 27 PHP
PHP7.0安装笔记整理
Aug 28 PHP
php单链表实现代码分享
Jul 04 PHP
php处理单文件、多文件上传代码分享
Aug 24 PHP
php flush无效,IIS7下php实时输出的方法
Aug 25 PHP
验证坐标在某坐标区域内php代码
Oct 08 PHP
php闭包中使用use声明变量的作用域实例分析
Aug 09 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实现批量修改文件后缀名的方法
2015/07/30 PHP
/etc/php-fpm.d/www.conf 配置注意事项
2017/02/04 PHP
PHP curl 或 file_get_contents 获取需要授权页面的方法
2017/05/05 PHP
PHP配合fiddler抓包抓取微信指数小程序数据的实现方法分析
2020/01/02 PHP
YII2框架中日志的配置与使用方法实例分析
2020/03/18 PHP
ASP.NET jQuery 实例10 动态修改hyperlink的URL值
2012/02/03 Javascript
基于jquery的图片幻灯展示源码
2012/07/15 Javascript
JavaScript中的闭包(Closure)详细介绍
2014/12/30 Javascript
jQuery固定元素插件scrolltofixed使用指南
2015/04/21 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记6)
2015/12/20 Javascript
jQuery dataTables与jQuery UI 对话框dialog的使用教程
2016/09/02 Javascript
AngularJS 获取ng-repeat动态生成的ng-model值实例详解
2016/11/29 Javascript
JavaScript的for循环中嵌套一个点击事件的问题解决
2017/03/03 Javascript
详解vue.js的事件处理器v-on:click
2017/06/27 Javascript
浅谈webpack打包过程中因为图片的路径导致的问题
2018/02/21 Javascript
Vue CLI4 Vue.config.js标准配置(最全注释)
2020/06/05 Javascript
纯js+css实现在线时钟
2020/08/18 Javascript
[07:27]DOTA2卡尔工作室 英雄介绍水晶室女篇
2013/06/21 DOTA
[01:21:36]CHAOS vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python定时采集摄像头图像上传ftp服务器功能实现
2013/12/23 Python
Python书单 不将就
2017/07/11 Python
Python socket实现的简单通信功能示例
2018/08/21 Python
Python寻找两个有序数组的中位数实例详解
2018/12/05 Python
利用Python对文件夹下图片数据进行批量改名的代码实例
2019/02/21 Python
pygame实现贪吃蛇游戏(上)
2019/10/29 Python
Python如何操作office实现自动化及win32com.client的运用
2020/04/01 Python
Python如何测试stdout输出
2020/08/10 Python
Python tkinter之ComboBox(下拉框)的使用简介
2021/02/05 Python
纯CSS3实现给头像加个光芒四射且旋转的背景动画效果
2014/05/07 HTML / CSS
使用CSS3制作一个简单的Chrome模拟器
2015/07/15 HTML / CSS
Ratchet 模态框的实现
2020/08/19 HTML / CSS
俄罗斯皮肤健康中心:Pharmacosmetica.ru
2020/02/22 全球购物
中层干部竞争上岗演讲稿
2014/01/13 职场文书
中文专业学生自我评价范文
2014/02/06 职场文书
中班下学期幼儿评语
2014/12/30 职场文书
2019年度开业庆典祝福语大全!
2019/07/05 职场文书