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

