Laravel Voyager自定义关联属性失效:full_name列不存在报错解决
解决Laravel Voyager自定义关联属性查询错误的方案
问题原因
你设置的$additional_attributes = ['full_name']会让Voyager自动将full_name加入数据库查询字段,但这个属性是通过访问器生成的虚拟字段,数据库中并不存在,因此触发了「字段不存在」的SQL错误。另外你代码里的访问器存在笔误:$this->_name应该是$this->l_name。
修复步骤
修正模型代码
移除$additional_attributes配置,同时修正访问器的拼写错误:// PlatformCategory.php public function getFullNameReadAttribute() { return "{$this->f_name} {$this->l_name}"; }配置Voyager后台显示
进入Voyager的Bread管理界面,找到PlatformCategory对应的Bread设置:- 在「Browse」标签页的「Fields to Display」中添加
full_name - 如果需要在详情页或编辑页展示,同样在对应标签页的字段列表中添加
full_name
- 在「Browse」标签页的「Fields to Display」中添加
原理说明
Voyager会自动识别模型中以getXxxReadAttribute命名的访问器,无需额外声明additional_attributes。直接在后台配置使用full_name即可读取到访问器生成的虚拟属性,不会触发数据库查询该字段的操作。
内容的提问来源于stack exchange,提问作者Mohammed Ali
相关产品推荐
相关产品推荐

