首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【说站】laravel模型中的$casts属性转换

【说站】laravel模型中的$casts属性转换

作者头像
很酷的站长
发布2022-11-24 17:04:13
发布2022-11-24 17:04:13
2.1K00
代码可运行
举报
运行总次数:0
代码可运行

有些时候,部分字段需要存储json数据

按照以往的操作,在create的时候,先手动对特定的字段进行json_encode,然后再create

update的时候,先手动json_decode,修改完毕后再json_encode,然后再update

想想都觉得麻烦,虽然可以使用laravel模型事件,在对应的creatingupdating的事件中去处理,但这也太大材小用了。

实际上模型中有casts属性可以帮我们完成这个功能。

从 Illuminate\Database\Eloquent\Model 找到 Illuminate\Database\Eloquent\Concerns\HasAttributes ,会发现有很多属性可供配置,

例如设置表名table,是否维护时间戳timestamps,可被批量赋值的属性fillable,主键字段名(默认idprimaryKey,主键字段类型(默认intkeyType,主键是否自增(默认是)incrementing,等等,这里主要说的是属性转换casts,在模型中设置一下即可:

PHP

代码语言:javascript
代码运行次数:0
运行
复制
/**
 * 类型转换
 * @var string[]
 */protected $casts = [
    'recharge => 'array',];

设置过后,从前端拿到的或者处理出来的字段array数据,就不需要手动去json_encodeupdate时候也不要管,会自动帮我们转为json数据进行存储。

但是需要注意的是,在create的时候会进行属性转换处理,但是在更新的时候,如果是直接使用update进行更新,则不会进行属性转换处理。

可参考:laravel模型事件-update触发updating和updated的问题

先使用first或者find获取模型后再操作即可,当然,updateOrCreate也可以。。

收藏 | 0点赞 | 0打赏

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档