Laravel 9自定义列名使用morphTo关联报错问题求助
解决Laravel 9多态关联自定义列名不生效的问题
问题出在父模型的关联配置未同步自定义列名:当你在子模型(Upload)的morphTo方法里指定了自定义的类型列(kind)和外键列(item_id),父模型(Product)的morphMany关联也需要明确声明这两个自定义列,否则Laravel会默认使用{关联名}_id和{关联名}_type作为列名,也就是这里的uploadable_id和uploadable_type,导致找不到字段报错。
修改Product模型的documents关联方法,补充指定自定义列参数:
public function documents() { return $this->morphMany(Upload::class, 'uploadable', 'kind', 'item_id'); }
morphMany方法的参数顺序为:
- 关联模型类
- 关联名称(要和子模型
morphTo的第一个参数一致) - 多态类型列名(对应
uploads表的kind) - 多态外键列名(对应
uploads表的item_id)
这样配置后,查询$model->documents时,Laravel就会使用正确的列名构建SQL条件,不会再出现列找不到的错误。
内容的提问来源于stack exchange,提问作者DeltaTango
相关产品推荐
相关产品推荐

