本文作者:changrun90

laravel模型中的$casts属性转换

12个月前 ( 08-27 21:15 ) 772
摘要: 有些时候,部分字段需要存储json数据。按照以往的操作,在create的时候,先手动对特定的字段进行json_encode,然后再create;而update的时候,先手动json...

有些时候,部分字段需要存储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进行更新,则不会进行属性转换处理。

文章版权及转载声明:

作者:changrun90本文地址:http://changrun.org/svip/2745.html发布于 12个月前 ( 08-27 21:15 )
文章转载或复制请以超链接形式并注明出处凡客笔记

文章作品版权归原创作者所有,如不慎侵犯了你的权益,请联系我们告知,我们将做删除处理!
本站程序只供源码爱好者学习研究使用。借鉴职业开发人员的代码写法,不得用于非法用途,不得违反国家法律,否则后果自负.
切记:本站提供的模板来源于网络,收集供学习交流之用。请勿改成非法网站,否则后果自负,与本站无关。

分享到:

发表评论

快捷回复:

评论列表 (暂无评论,772人围观)参与讨论

还没有评论,来说两句吧...