调用tx.Preload("Tags")报错「model value required when using preload」求助
Gorm预加载报错"model value required when using preload"的解决办法
问题原因
这个错误的核心是Gorm的Preload方法需要明确知道要预加载的关联属于哪个模型:
- 链式调用到底的写法中,
Find(&test)提前把[]*models.Test模型传递给了Gorm,整个调用链能识别出Tags是models.Test的关联字段,因此可以正常运行。 - 拆分调用的写法里,
tx = tx.Preload("Tags").Where(filter)这一步还未指定任何模型,Gorm无法判断Tags对应哪个结构体的关联,所以抛出了该错误。
修复方案
只需要在调用Preload之前,用Model方法明确指定模型即可:
tx *gorm.DB tx = tx.Model(&models.Test{}).Preload("Tags").Where(filter) // 先绑定模型 var test []*models.Test // 此处执行其他操作 tx.Find(&test)
这样Gorm就能识别出Tags是models.Test的关联字段,预加载逻辑即可正常执行。
内容的提问来源于stack exchange,提问作者郭佰胜
相关产品推荐
相关产品推荐

