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

在 Laravel 中,Eloquent 模型的 Casts 功能允许你自动将数据库中的字段转换为更易用的数据类型。除了内置的 cast 类型(如 int、json、datetime 等),你还可以通过自定义 Casts 来处理特定格式的数据,比如加密字段、序列化对象、格式化地址等。
要为 Eloquent 模型添加自定义 Casts,首先需要创建一个实现 Illuminate\Contracts\Database\Eloquent\CastsAttributes 接口的类。这个类需定义两个方法:get 和 set,分别用于从数据库读取时的转换和写入数据库前的处理。
例如,我们想将用户的姓名字段在存储时转为大写,读取时保持原样:
namespace App\Casts;
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
class UppercaseName implements CastsAttributes
{
    public function get($model, $key, $value, $attributes)
    {
        return $value;
    }
    public function set($model, $key, $value, $attributes)
    {
        return strtoupper($value);
    }
}
定义好 Casts 类后,在 Eloquent 模型的 $casts 属性中注册它:
namespace App\Models;
use App\Casts\UppercaseName;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
    protected $casts = [
        'name' => UppercaseName::class,
    ];
}
这样,每次保存 name 字段时,都会自动转为大写;读取时则返回原始值(未修改)。
假设你想自动加密某些敏感字段(如身份证号),可以这样实现:
namespace App\Casts;
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
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 在存入数据库时会被自动加密,读取时自动解密。
CastsAttributes 接口。VARCHAR 或 TEXT)。以上就是laravel如何为Eloquent模型添加自定义Casts_Laravel Eloquent模型自定义Casts方法的详细内容,更多请关注php中文网其它相关文章!
                        
                        每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
                
                                
                                
                                
                                
                                
                                Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号