如何修改Gorm中表的主键字段?自定义主键查询报错解决
解决Gorm自定义主键仍使用默认id排序的问题
问题原因
你嵌入了gorm.Model,而gorm.Model自带ID uint字段,Gorm会默认将这个字段当作主键,在执行First()等查询时自动按id排序,而你的表实际主键是u_id,因此出现"Unknown column 'siam_users.id' in 'order clause'"错误。
解决方案
方案1:移除gorm.Model嵌入,手动定义所需字段
如果不需要依赖gorm.Model的默认字段,直接自定义结构体,包含主键和需要的时间、软删除字段:
import ( "time" "gorm.io/gorm" ) type Users struct { UId uint `gorm:"column:u_id;primaryKey"` CreatedAt time.Time // 对应created_at字段 UpdatedAt time.Time // 对应updated_at字段 DeletedAt gorm.DeletedAt `gorm:"index"` // 软删除字段,对应deleted_at Password string `gorm:"column:u_password"` }
方案2:保留gorm.Model,忽略自带的ID字段
如果想继续使用gorm.Model的其他字段(如CreatedAt、UpdatedAt),只需给自带的ID字段加上gorm:"-"标签,让Gorm忽略它,同时确保自定义的UId标记为主键:
type Users struct { gorm.Model ID uint `gorm:"-"` // 忽略gorm.Model自带的ID字段 UId uint `gorm:"column:u_id;primaryKey"` Password string `gorm:"column:u_password"` }
两种方案都能让Gorm识别u_id作为主键,执行First()时会按u_id排序(或不指定排序,取决于你的需求),避免生成包含id字段的SQL。
内容的提问来源于stack exchange,提问作者Lynx
相关产品推荐
相关产品推荐

