我们先复现这个问题。
1 | <?php |
1 | <?php |
请求看看返回。
1 | [ |
orderNumber
的隐藏是生效了,但 hongfs
是没有的。
那我们直接去看 toArray
的源码。(select
是查询,不干这事,你语义化去理解代码可以大大提升排查速度) 这块 IDEA 编辑器没办法找到相关路径,因为我们是模型的查询,所以涉及集合问题就要去 think-orm 这里看,如果后期我们使用了 collect 那就看 think-helper ,现在我们追踪到的路径是 vendor/topthink/think-orm/src/model/concern/Conversion.php
,然后找到 toArray
函数的代码。
1 | // 追加属性(必须定义获取器) |
这里是分两块的,一个是追加属性,一个是处理模型原本数据。我们要看的是追加属性,所以我们去看 appendAttrToArray
函数。
前面两个 if 和我们也没太大关系,我们在最后的 else 加点调试代码看看。
1 | protected function appendAttrToArray(array &$item, $key, array|string $name, array $visible, array $hidden): void |
1 | string(17) "appendAttrToArray" |
看最后一段的输出,其中 key=1 name=hongfs visible是空数组,hidden 好像是经过处理过的内容。 尝试下在 else 里面处理我们的问题。
1 | protected function appendAttrToArray(array &$item, $key, array|string $name, array $visible, array $hidden): void |
重新访问现在是可以了。
1 | [ |
上面的 hidden 变成二维数组,是在 toArray 最开始就进行的处理,让我们后面的修复不需要考虑那么多,点赞。