You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Laravel模型number字段自动生成hashed_number并移除该填充项

可以通过修改器实现需求,具体调整如下:

1. 更新模型的$fillable

先移除$fillable中的hashed_number,确保该字段不会通过批量赋值被手动设置:

protected $fillable = [
    'number',
    'security_code'
];

2. 修改number字段的修改器逻辑

在number的Attribute设置方法中,利用原始未加密的卡号自动生成hashed_number并写入模型属性,无需单独传入该参数:

protected function number(): Attribute
{
    return Attribute::make(
        get: fn(string $value) => Crypt::decrypt($value),
        set: function(string $value) {
            // 基于原始卡号生成hashed_number
            $this->attributes['hashed_number'] = hash('sha3-512', $value) . Config::get("app.card_pepper");
            // 返回加密后的卡号用于数据库存储
            return Crypt::encrypt($value);
        }
    )->shouldCache();
}

3. (可选)简化hashedNumber修改器

由于已经手动完成hashed_number的赋值,原来的hashedNumber修改器可以保留只读逻辑(如果需要从模型直接获取该值),或者直接删除:

// 保留只读的hashedNumber修改器(可选)
protected function hashedNumber(): Attribute
{
    return Attribute::make(
        get: fn(string $value) => $value
    )->shouldCache();
}

逻辑说明

当创建或更新GiftCard模型时,只要传入number参数,number的set方法会先基于原始卡号生成hashed_number并写入模型属性数组,再返回加密后的卡号存入数据库。整个过程完全自动,无需手动处理hashed_number字段。

内容的提问来源于stack exchange,提问作者Damian Rafael Lattenero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 17:39:54