Laravel从v8.75升级到v11.31后用户模型Photo访问器失效问题求助
Laravel从v8.75升级到v11.31后用户模型Photo访问器失效问题求助
Hey 各位Laravel老哥们,我最近把项目从v8.75升级到v11.31后,遇到个头疼的问题——User模型里的photo访问器突然不生效了,空头像的时候不再返回默认图,直接给null,折腾半天没搞定,来求支招!
先说说之前的情况:在v8.75的时候,我是这么写访问器的,用来在用户没上传头像时返回默认的user.png:
public function getPhotoAttribute($value) { // Default Photo $defaultPhotoUrl = mediaUrl('assets/user.png'); return !empty($value) && $value != 'undefined' ? (new FileHelper)->getFileUrl($value) : $defaultPhotoUrl; }
那时候一切正常,空头像都会自动替换成默认图。
升级到v11.31后,我查了文档,知道访问器的语法变了,就改成了新的Attribute语法:
/** * Interact with the user's photo. */ protected function photo(): Attribute { return Attribute::make( get: fn (string $value) => (!empty($value) && $value != 'undefined' ? (new FileHelper)->getFileUrl($value) : mediaUrl('assets/user.png')), ); }
结果改完还是没效果,空photo字段还是返回null,完全没触发默认图的逻辑。
我自己也排查了一些点,但没找到原因:
- 确认了FileHelper和mediaUrl方法都是正常的,单独调用能返回正确的URL
- 数据库里的photo字段,空值的记录确实是null或者空字符串
- 模型里也没改其他相关的逻辑
有没有老哥遇到过类似的问题?或者帮我看看是不是新语法里有什么细节我没注意到?比如类型声明的问题?或者访问器触发的条件变了?
内容来源于stack exchange
相关产品推荐
相关产品推荐

