field php,field · ThinkPHP5.1完全开发手册 · 看云

`field`方法主要作用是标识要返回或者操作的字段,可以用于查询和写入操作。

## 用于查询

### 指定字段

在查询操作中`field`方法是使用最频繁的。

~~~

Db::table('think_user')->field('id,title,content')->select();

~~~

这里使用field方法指定了查询的结果集中包含id,title,content三个字段的值。执行的SQL相当于:

~~~

SELECT id,title,content FROM think_user

~~~

可以给某个字段设置别名,例如:

~~~

Db::table('think_user')->field('id,nickname as name')->select();

~~~

执行的SQL语句相当于:

~~~

SELECT id,nickname as name FROM think_user

~~~

### 使用SQL函数

可以在field方法中直接使用函数,例如:

~~~

Db::table('think_user')->field('id,SUM(score)')->select();

~~~

执行的SQL相当于:

~~~

SELECT id,SUM(score) FROM think_user

~~~

> 除了select方法之外,所有的查询方法,包括find等都可以使用field方法。

`V5.1.7+`版本开始,如果需要使用SQL函数,推荐使用下面的方式:

~~~

Db::table('think_user')->fieldRaw('id,SUM(score)')->select();

~~~

### 使用数组参数

field方法的参数可以支持数组,例如:

~~~

Db::table('think_user')->field(['id','title','content'])->select();

~~~

最终执行的SQL和前面用字符串方式是等效的。

数组方式的定义可以为某些字段定义别名,例如:

~~~

Db::table('think_user')->field(['id','nickname'=>'name'])->select();

~~~

执行的SQL相当于:

~~~

SELECT id,nickname as name FROM think_user

~~~

对于一些更复杂的字段要求,数组的优势则更加明显,例如:

~~~

Db::table('think_user')->field(['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 think_user

~~~

>[danger] 对于带有复杂SQL函数的字段需求必须使用数组方式

### 获取所有字段

如果有一个表有非常多的字段,需要获取所有的字段(这个也许很简单,因为不调用field方法或者直接使用空的field方法都能做到):

~~~

Db::table('think_user')->select();

Db::table('think_user')->field('*')->select();

~~~

上面的用法是等效的,都相当于执行SQL:

~~~

SELECT * FROM think_user

~~~

但是这并不是我说的获取所有字段,而是显式的调用所有字段(对于对性能要求比较高的系统,这个要求并不过分,起码是一个比较好的习惯),下面的用法可以完成预期的作用:

~~~

Db::table('think_user')->field(true)->select();

~~~

`field(true)`的用法会显式的获取数据表的所有字段列表,哪怕你的数据表有100个字段。

### 字段排除

如果我希望获取排除数据表中的`content`字段(文本字段的值非常耗内存)之外的所有字段值,我们就可以使用field方法的排除功能,例如下面的方式就可以实现所说的功能:

~~~

Db::table('think_user')->field('content',true)->select();

~~~

则表示获取除了content之外的所有字段,要排除更多的字段也可以:

~~~

Db::table('think_user')->field('user_id,content',true)->select();

//或者用

Db::table('think_user')->field(['user_id','content'],true)->select();

~~~

>[danger] 注意的是 字段排除功能不支持跨表和join操作。

## 用于写入

除了查询操作之外,`field`方法还有一个非常重要的安全功能--**字段合法性检测**。`field`方法结合数据库的写入方法使用就可以完成表单提交的字段合法性检测,如果我们在表单提交的处理方法中使用了:

~~~

Db::table('think_user')->field('title,email,content')->insert($data);

~~~

即表示表单中的合法字段只有`title`,`email`和`content`字段,无论用户通过什么手段更改或者添加了浏览器的提交字段,都会直接屏蔽。因为,其他所有字段我们都不希望由用户提交来决定,你可以通过自动完成功能定义额外需要自动写入的字段。

>[danger] 在开启数据表字段严格检查的情况下,提交了非法字段会抛出异常,可以在数据库设置文件中设置:

> ~~~

> // 关闭严格字段检查

> 'fields_strict'=>false,

> ~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值