26
2019.2
字段排除
作者: POPASP
更多的情况下我们都是查询某些字段,但有些情况下面我们需要通过字段排除来更方便的查询字段,例如文章详细页,我们可能只需要排除status和update_time字段,这样就不需要写一堆的字段名称了(有些人可能觉得为什么不用 `“*”` 查询全部字段呢,不是更方便吗,但是有一点不可否认,即使列出所有字段也比查询所有字段的效率要高哦^_^)。
field方法不支持排除(NOT)机制, 但可以使用fieldRev来进行字段排除,它的参数与field相同。举个例子,例如我们有一个article表,定义了有id,name,title,status,create_time,read_count,comment_count字段,当使用普通的字段查询
```brush:vb
set rs = B_("post").field("id,title").select()
```
这是我们比较常用的查询字段方式,表示查询id,name字段 。
生成的SQL语句应该是
```brush:sql
SELECT id,name FROM article
```
当使用下面的字段排除方式查询的时候
```brush:vb
set rs = B_("post").fieldRev("create_time,read_count,comment_count").select()
```
fieldRev方法采用的是排除机制,因此实际查询的字段是除create_time,read_count,comment_count之外的其他数据表所有字段,最终要查询的字段根据实际的数据表字段有所不同。
生成的SQL语句就变成了
```brush:sql
SELECT id,name,title,status FROM article
```
### 优先级
当同时使用了field方法与fieldRev方法后,二者存在一个谁会被使用谁不会被使用的优先级。系统规定的是以field的优先级高于fieldRev,即同时使用了field与fieldRev的话,fieldRev则不起作用。
### 高级使用
如果fieldRev中包含了数据表中不存在的字段,则它不会被剔除,这样的设计给使用带来了方便。
例如
```brush:vb
set rs = B_("post").fieldRev("create_time,read_count,comment_count,create_time as add_time").select()
```
生成的SQL语句就变成了
```brush:sql
SELECT id,name,title,status,create_time as add_time FROM article
```