You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 01:11:02