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 ```