自定义 Casts 可实现数据自动转换,如大写处理和加密存储。创建类实现 CastsAttributes 接口,定义 get 和 set 方法,用于读取和写入时的数据处理。在模型 $casts 属性中注册后,可自动对指定字段进行转换,提升代码安全与维护性。

在 Laravel 中,Eloquent 模型的 Casts 功能允许你自动将数据库中的字段转换为更易用的数据类型。除了内置的 cast 类型(如 int、json、datetime 等),你还可以通过自定义 Casts 来处理特定格式的数据,比如加密字段、序列化对象、格式化地址等。
创建自定义 Casts 类
要为 Eloquent 模型添加自定义 Casts,首先需要创建一个实现 IlluminateContractsDatabaseEloquentCastsAttributes 接口的类。这个类需定义两个方法:get 和 set,分别用于从数据库读取时的转换和写入数据库前的处理。
例如,我们想将用户的姓名字段在存储时转为大写,读取时保持原样:
namespace AppCasts;use IlluminateContractsDatabaseEloquentCastsAttributes;class UppercaseName implements CastsAttributes{ public function get($model, $key, $value, $attributes) { return $value; } public function set($model, $key, $value, $attributes) { return strtoupper($value); }}
在模型中使用自定义 Casts
定义好 Casts 类后,在 Eloquent 模型的 $casts 属性中注册它:
namespace AppModels;use AppCastsUppercaseName;use IlluminateDatabaseEloquentModel;class User extends Model{ protected $casts = [ 'name' => UppercaseName::class, ];}
这样,每次保存 name 字段时,都会自动转为大写;读取时则返回原始值(未修改)。
更复杂的自定义 Casts 示例:加密字段
假设你想自动加密某些敏感字段(如身份证号),可以这样实现:
namespace AppCasts;use IlluminateContractsDatabaseEloquentCastsAttributes;class Encrypted implements CastsAttributes{ public function get($model, $key, $value, $attributes) { return decrypt($value); } public function set($model, $key, $value, $attributes) { return encrypt($value); }}
然后在模型中使用:
protected $casts = [ 'id_number' => Encrypted::class,];
这样,id_number 在存入数据库时会被自动加密,读取时自动解密。
注意事项
自定义 Casts 类必须实现 CastsAttributes 接口。 确保加密/解密操作在安全环境下进行,且密钥配置正确。 某些 Casts(如 JSON)已有内置支持,无需重复造轮子。 自定义 Casts 不影响数据库迁移,字段类型仍需手动设置(如 VARCHAR 或 TEXT)。基本上就这些。通过自定义 Casts,你可以让 Eloquent 模型更智能地处理数据转换,提升代码可维护性和安全性。
以上就是laravel如何为Eloquent模型添加自定义Casts_Laravel Eloquent模型自定义Casts方法的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/194992.html
微信扫一扫
支付宝扫一扫