laravel模型中的$casts属性转换
有些时候,部分字段需要存储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,在模型中设置一下即可:
/** * 类型转换 * @var string[] */ protected $casts = [ 'recharge => 'array', ];
设置过后,从前端拿到的或者处理出来的字段array数据,就不需要手动去json_encode,update时候也不要管,会自动帮我们转为json数据进行存储。
但是需要注意的是,在create的时候会进行属性转换处理,但是在更新的时候,如果是直接使用update进行更新,则不会进行属性转换处理。
可参考:laravel模型事件-update触发updating和updated的问题
先使用first或者find获取模型后再操作即可,当然,updateOrCreate也可以。。
天天下载
这东西还是不错的。
走过路过,看看老板有啥新动态
什么时候更新一下主题,要跟上时代的脚步
什么时候更新一下主题呀,好久没更新了,要跟上时代的脚步
老板人好技术好,老板一生幸福。
感谢教程