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

Laravel 使用可变变量访问修改器时如何获取数据库存储的原始值

解决方案

你遇到的问题本质是Laravel Eloquent动态属性解析逻辑的特性:直接通过$object->{动态拼接字符串}的方式访问属性时,部分场景下Laravel不会先查询模型已加载的$attributes数组,而是直接调用对应访问器,因此不会传入数据库存储的原始值。

你可以通过以下几种方式解决:

  • 方法1:使用官方提供的getAttribute方法访问动态属性,该方法会完整走Laravel的属性解析流程,自动传入数据库原始值到访问器参数
    $name = 'working_time';
    $value = $object->getAttribute('used_' . $name);
    
    这是最稳妥的兼容写法,适用于所有固定、动态属性的访问场景。
  • 方法2:在模型的$casts属性中注册你的自定义访问器属性,强制Laravel将该属性识别为合法的模型字段,动态访问时会自动加载原始值:
    // 对应模型类中添加
    protected $casts = [
        'used_working_time' => 'integer', // 可根据实际字段类型调整为float、string等
    ];
    
  • 方法3:先获取模型所有已加载的属性数组,再取值兜底
    $attributes = $object->getAttributes();
    $attrName = 'used_' . $name;
    $value = $attributes[$attrName] ?? $object->$attrName;
    

注:你定义的getUsedWorkingTimeAttribute属于访问器(Accessor),修改器(Mutator)指的是setXXXAttribute类型的方法,二者功能不同注意区分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:45:04