如何使用ThinkPHP模型修改器实现数组自动转换为JSON并存储?
- 内容介绍
- 文章标签
- 相关推荐
本文共计932个文字,预计阅读时间需要4分钟。
在ThinkPHP模型中,直接给字段赋数值时,数据库中存储的仍然是原始的数据类型,而非字符串。如果模型中的字段类型声明为数值类型(如int、float等),则数据库存储的将是数值;如果声明为字符串类型(如varchar、text等),则存储的将是字符串。
类型声明只对读写属性生效,不涉及数据处理。例如:
为什么 $model->extra = ['a' => 1] 能转 JSON,但 $model->save(['extra' => ['a' => 1]]) 却存成 Array 字符串?
因为 ThinkPHP 的 JSON 自动编解码只在模型的属性访问器(__get/__set)中触发,而 save(['field' => $value]) 是绕过访问器、直写底层数据的。它把数组当普通值塞进 SQL 参数,PDO 默认把它转成 Array 字符串(如 "Array"),不是 JSON。
本文共计932个文字,预计阅读时间需要4分钟。
在ThinkPHP模型中,直接给字段赋数值时,数据库中存储的仍然是原始的数据类型,而非字符串。如果模型中的字段类型声明为数值类型(如int、float等),则数据库存储的将是数值;如果声明为字符串类型(如varchar、text等),则存储的将是字符串。
类型声明只对读写属性生效,不涉及数据处理。例如:
为什么 $model->extra = ['a' => 1] 能转 JSON,但 $model->save(['extra' => ['a' => 1]]) 却存成 Array 字符串?
因为 ThinkPHP 的 JSON 自动编解码只在模型的属性访问器(__get/__set)中触发,而 save(['field' => $value]) 是绕过访问器、直写底层数据的。它把数组当普通值塞进 SQL 参数,PDO 默认把它转成 Array 字符串(如 "Array"),不是 JSON。

