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
相关产品推荐
相关产品推荐

