今天用gorm连接mysql一个品牌表(item_brands)时因为这个表是原先就存在的,并且不是以id为主键,而是brand_id。所以使用以下结构体:
type ItemBrand struct {
gorm.Model
BrandID int `gorm:"primary_key"`
BrandName string
Sort string
Status string
Logo string
DeletedAt gorm.DeletedAt
}
但是在查询Find的时候发现ID是0,并且通过First查询是报错。通过查询日志发现生成SQL如下 :
SELECT * FROM `item_brands` WHERE `item_brands`.`deleted_at` IS NULL ORDER BY `item_brands`.`id` LIMIT 1
发现查找的主键还是id。去翻翻文档吧。
在这里找到原来指定主键后ID属性也要写出来,这个没有给出提醒和解释,有空去追下源码看看!
type ItemBrand struct {
gorm.Model
ID int //指定主键的话,此项不可省略
BrandID int `gorm:"primaryKey"`
BrandName string
Sort string
Status string
Logo string
DeletedAt gorm.DeletedAt
}