Laravel:为什么Eloquent设置的隐藏字段在Tinker中仍可被显示?
你看到的字段前的#是Tinker输出时标识受保护类属性的标记,和你设置的$hidden属性没有冲突。
Laravel的$hidden配置仅在模型序列化为数组或者JSON的时候生效,作用是避免敏感字段在接口返回、日志打印等序列化场景中泄露,并不会删除模型实例本身携带的属性值。
你在Tinker中直接打印模型实例时,Tinker会输出实例的所有属性(包括公有、受保护、私有属性),此时还没有触发序列化逻辑,所以能看到完整的属性列表,#前缀仅代表该属性是受保护属性,不是实际字段名的一部分。
你可以执行以下命令验证$hidden的生效效果:
// 转为数组输出,已自动移除password和remember_token字段 User::inRandomOrder()->first()->toArray(); // 转为JSON输出,同样不会包含敏感字段 User::inRandomOrder()->first()->toJson();
补充:你代码中写的
inRandomerOrder为拼写错误,正确的方法名是inRandomOrder。
内容的提问来源于stack exchange,提问作者ryanvb92
相关产品推荐
相关产品推荐

