发布于2026-07-02 阅读(0)
扫一扫,手机访问
ThinkPHP 的 `$append` 属性,说白了就是一个开关——它用来配合访问器(获取器)触发计算逻辑。但有个前提:这个开关只在模型实例被正确序列化时才会生效,比如调用 `toArray()`、`toJson()` 或者 API 自动转换。而且,每个你追加的字段,都必须有一个对应命名的 `getXXXAttr()` 方法等着它,否则就是白搭。

很多新手以为 `$append` 里写个字段名就能自动出值,其实远没那么简单。它本质上是一个触发机制,让你能在模型输出时动态计算一些额外信息。但坑也不少,我们来逐一拆解。
比如你想追加一个 `full_name` 字段,那就得在模型里做两件事:
配对错误是最常见的翻车点,字段名和方法名差一个字母都不行。
直接用 `Db::table()->select()` 或 `query()->execute()` 得到的是原生数组,压根不会触发任何获取器,`$append` 自然毫无效果。所以要注意:
每个追加字段都会在每条记录的 `toArray()` 过程中单独执行一次获取器。假设有 100 条数据,你又加了 3 个 `$append` 字段——那就意味着 300 次函数调用。如果在获取器里再搞个数据库查询,后果可想而知。
`protected $append = [...]` 是全局默认设置,所有 `toArray()` 调用都会生效。而 `$model->append([...])` 是单次覆盖,会清空之前所有追加项。所以:
搞清楚这些,`$append` 才能真正帮你写出干净、高效的代码。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8