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

Laravel中如何将BenSampo枚举对应的数据库int值转换为枚举键名

解决Laravel中BenSampo Enum值转枚举键名方案

步骤1:修正模型枚举投射配置

你之前在模型$casts中配置的投射字段是不存在的虚拟字段courierNameEnum,需要改为数据库实际存储枚举值的CourierName字段:

class Shipment extends Model
{
    use HasFactory;

    protected $fillable = [
        'user_id',
        'vendor',
        'weight',
        'transitStatus',
        'isInvoiceReady',
        'trackingNumber',
        'CourierName',
        'CourierTrackingNumber',
            
    ];

    protected $casts = [
        // 投射字段改为实际存储的CourierName
        'CourierName' => Courier::class,
    ];
}

配置完成后,访问$package->CourierName会直接返回Courier枚举的实例,而非数据库存储的整数。

步骤2:修改Blade模板输出逻辑

枚举实例自带key属性,直接调用即可获取对应的枚举键名:
把模板中原有的

{{$package->CourierName}}

修改为

{{$package->CourierName->key}}

即可实现值为0时输出USPS,值为1时输出UPS,值为2时输出Fedex的需求。


备用方案(无需修改模型配置)

如果不想改动模型的投射配置,也可以直接在模板中手动转换枚举值:
首先在模板顶部引入枚举类的命名空间:

@use(App\Enums\Courier) // 替换为你实际的Courier枚举命名空间

然后输出位置修改为:

{{ Courier::from($package->CourierName)->key }}

内容的提问来源于stack exchange,提问作者Paul Gordon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:06:04