ORM 查询如何排除某个字段?如只排除 content 文本,其它字段都查询
ORM查询如何排除某些字段?如只排除content文本,其它字段都需要。
$data = Content::where('pid',1)->get(['id','title','time', ...]);`
这么写感觉很笨,有没有直接排除content字段,其它字段都要查询的方法呢?
关于 LearnKu
先说结论:我认为,需要查啥自己手动写在 Sql 里.
Mysql 并没有提供排除的查询方式,所以你要这样查询,无论是你人工做这个事儿还是程序自动帮你算出来要查询的字段,总之是要进行一步转换的.
那么我们就来说说程序怎么进行转换.
首先你要知道你表里所有的字段,这样才能进行排除.知道表里的所有字段的方式我能想到的有两种,一种是写死在你的 Model 里,还有一种是去数据库查询一遍.两种都有弊端.
第一种写死,如果你数据库有添加字段,是需要人工维护到程序里的,这样跟你自己手动在 Sql 里进行添加没有什么两样了,而且你数据库里结构发生变化证明有功能变更,这个时候你之前的 Sql 可能也会增加一些排除的字段或者有其他的变更,这样就要维护两份数据,不如在变更需求的时候直接变更之前手写的 Sql.
第二种程序进行查询,显然这会让你每次的查询 Sql 增加一条,当然你也可以加一个缓存来减少 Sql 的查询,不过要在数据库结构发生变更的时候记得清理缓存,否则会出现奇奇怪怪的 Bug.
@TimJuly 那就是没有类似ThinkPHP的用法是吧?
普通查询某些字段
排除这些字段
要么就是
desctest 然后遍历需要排除哪些字段是吧。@yaobaliu 是的,官方没有提供这种查询方法,你可以自己去扩展一下.
@yaobaliu 临时修改属性的可见度
@小恪守 这只是在 display 的时候隐藏掉而已,查询时还是查了的。
unset()
model里处理白名单
model里配置安全字段和隐藏字段不就好了。。。。
->makeHidden([.....]);
没有这种函数,可以使用隐藏字段,但是其实也是查询了 makeHidden