【说站】laravel模型中的$casts属性转换
2023-06-13 09:13:23 时间
有些时候,部分字段需要存储json数据
。
按照以往的操作,在create
的时候,先手动对特定的字段进行json_encode
,然后再create
;
而update
的时候,先手动json_decode
,修改完毕后再json_encode
,然后再update
;
想想都觉得麻烦,虽然可以使用laravel模型事件
,在对应的creating
或updating
的事件中去处理,但这也太大材小用了。
实际上模型中有casts
属性可以帮我们完成这个功能。
从 Illuminate\Database\Eloquent\Model
找到 Illuminate\Database\Eloquent\Concerns\HasAttributes
,会发现有很多属性可供配置,
例如设置表名table
,是否维护时间戳timestamps
,可被批量赋值的属性fillable
,主键字段名(默认id
)primaryKey
,主键字段类型(默认int
)keyType
,主键是否自增(默认是)incrementing
,等等,这里主要说的是属性转换casts
,在模型中设置一下即可:
PHP
/**
* 类型转换
* @var string[]
*/protected $casts = [
'recharge => 'array',];
设置过后,从前端拿到的或者处理出来的字段array
数据,就不需要手动去json_encode
,update
时候也不要管,会自动帮我们转为json数据
进行存储。
但是需要注意的是,在create
的时候会进行属性转换处理,但是在更新的时候,如果是直接使用update
进行更新,则不会进行属性转换处理。
可参考:laravel模型事件-update触发updating和updated的问题
先使用first
或者find
获取模型后再操作即可,当然,updateOrCreate
也可以。。
收藏 | 0点赞 | 0打赏
相关文章
- sql 时间日期格式转换[通俗易懂]
- java对象转换为json字符串_java中将字符串转换为json
- Sidify Music Converter Mac(Spotify音乐转换软件)
- 8.Nginx实践之请求图片转换为Google推出的webp格式转换工具实践
- 合并列,在【转换】和【添加列】菜单中的功能竟有本质上的差别!
- 学习LAMBDA函数:将Excel公式转换为自定义函数(下)
- js中数组、对象与JSON之间的相互转换
- JS实现汉字简体繁体转换详解编程语言
- Go语言将秒转换为具体的时间
- Linux atoi函数:字符串转换为整数(linuxatoi)
- Redis数据迁移:跨环境体验无缝转换(redis数据迁移)
- 媒体转换
- MySQL数据转换一行变多行(mysql一行转为多行)
- Oracle中数值类型转换技巧(oracle中数值转换)
- oracle中将两列转换为两行(oracle两列转成两行)
- js中将具有数字属性名的对象转换为数组
- C语言数与串之间转换的方法
- Enter转换为Tab的小例子(兼容IE,Firefox)