您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
thinkphp6 db层面(非model形式)对于查询的字段排除(隐藏)的实现
发布时间:2021-10-17 12:17:26编辑:雪饮阅读()
db层面隐藏排除字段
像是tp字段上如果查询一个结果想要隐藏或者排除某个字段,就之前了解可以在model上用hidden属性以数组形式好像是可以定义要隐藏或排除查询出来的字段(好像tp6时候才支持的吧,具体不晓得了)。
但是有时候直接用db更方便,那么db层面如何实现呢?
db层面可以通过如withAttr这种链式操作的获取器形式将某个字段置空
$user=Db::name('jwt_user')->withAttr('passwd', function($value, $data) {
return "";
})->where("username",$username)->where("passwd",md5($passwd))->find();
return "";
})->where("username",$username)->where("passwd",md5($passwd))->find();
但是这样仅仅只是将一个字段置空,但是该字段仍旧在的,这对于passwd类似字段不想显示这些敏感信息有效的,但是对于数据展示来说还是不太好,因为我直接不想要某个字段,这里该字段虽然置空,但是仍旧有,如果字段过多,这里获取器的链式如果支持多个则语法上也比较累赘,还有就是底层处理时候应该也比较消耗性能吧。
那么其实还有另外一个比较棒的方法,这个方法thinkphp6官方文档中我貌似没有看到,我从其源码上面看到的:
这样操作就可以真实的让结果中不存在这个字段了,并且从语法上面看也是很简洁的,这个好像也是支持多个字段排除的,多个字段好像是支持字符串或者数组,若是字符串好像是用英文逗号分隔每个字段,如果是数组好像是一个二维数组每个第二维度的数组中都有field做为键名,然后该二维的这个field对应的值就是你要排除的对应的字段名。不过对于多字段支持,这点我也只是大概看了下源码,没有具体测试。
关键字词:thinkphp6,字段,排除,字段排除