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

Laravel 9中带$key参数的getAttribute等价方法是什么?

Laravel 9中重写getAttribute的等价实现

在Laravel 9里,你完全可以继续直接重写模型的getAttribute方法,和Laravel 7的写法本质上没区别。不过要注意,如果你还需要保留Laravel默认的属性读取逻辑(比如读取数据库字段、处理已定义的字段专属访问器等),记得在自定义逻辑里调用父类的方法:

class Product extends Model
{
    public function getAttribute($key)
    {
        // 你的原有逻辑,直接返回key
        return $key;
        
        // 如果需要保留默认属性读取逻辑,改成下面这行:
        // return parent::getAttribute($key);
    }
}

要是你的实际需求是处理非数据库列的自定义属性,更推荐用Laravel的__get魔术方法,这样不会完全覆盖默认的属性获取流程,避免模型功能异常。示例代码如下:

class Product extends Model
{
    public function __get($key)
    {
        // 先尝试默认的属性获取逻辑
        try {
            return parent::__get($key);
        } catch (\Exception $e) {
            // 自定义处理非列名属性的逻辑
            return $key;
        }
    }
}

另外,如果你想对所有属性的获取做统一处理,也可以重写getAttributeValue方法——这是Laravel内部调用字段访问器的入口方法:

class Product extends Model
{
    public function getAttributeValue($key)
    {
        // 自定义处理逻辑
        return $key;
        
        // 需要保留默认逻辑的话,调用父类方法:
        // return parent::getAttributeValue($key);
    }
}

总结一下:如果只是要和Laravel 7里重写getAttribute的效果完全一致,直接重写该方法就行,Laravel 9并没有移除这个方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:11:27