在PostgreSQL Gorm中获取数据



我的模型如下:

package models
import "github.com/lib/pq"
type Guild struct {
Id               string         `json:"id" gorm:"primaryKey"`
DefaultBitrate   int            `json:"defaultBitrate"`
DefaultState     string         `json:"defaultState"`
DefaultCategory  string         `json:"defaultCategory"`
DefaultUserLimit int            `json:"defaultUserLimit"`
HelpChannel      string         `json:"helpChannel"`
Generators       pq.StringArray `json:"generators" gorm:"type:text[]"`
Channels         pq.StringArray `json:"channels" gorm:"type:text[]"`
}

功能文件:

func (h handler) CreateGuild(guildid string) error {
guild := &models.Guild{
Id:             guildid,
DefaultBitrate: "64",
}
if result := h.DB.Create(&guild); result.Error != nil {
return result.Error
}
return nil
}
func (h handler) GetGuild(guildid string) (models.Guild, error) {
var guild models.Guild
if result := h.DB.First(&guild, guildid); result.Error != nil {
return guild, result.Error
}
return guild, nil
}

所以我所做的是我首先创建一个公会,然后尝试用相同的id获得它,但我没有在控制台中记录任何内容

Database := db.Init()
h := dbhandlers.New(Database)
data, err := h.GetGuild("71728137382983743892")
fmt.Print(data.DefaultBitrate)

Github:https://github.com/apidev234/abred

注意:我已经创建了这样的公会:

err := h.CreateGuild("71728137382983743892")

首次亮相:

2022/03/24 13:37:23 /Users/gaurish/Desktop/Coding/TempVC-Bot/database/handlers/Functions.go:12 SLOW SQL >= 200ms
[1126.461ms] [rows:1] INSERT INTO "guilds" ("id","default_bitrate","default_state","default_category","default_user_limit","help_channel") VALUES ('ASDHA','64','','',0,'')
2022/03/24 13:37:44 /Users/gaurish/Desktop/Coding/TempVC-Bot/database/handlers/Functions.go:19 ERROR: column "asdha" does not exist (SQLSTATE 42703)
[229.439ms] [rows:0] SELECT * FROM "guilds" WHERE ASDHA ORDER BY "guilds"."id" LIMIT 1

阵列:

func (h Handler) NewGenerator(guildid string, channelid string) {
guild := models.Guild{
Id: guildid,
}
if result := h.DB.First(&guild, "id = ?", guildid).Update("generators", append(guild.Generators, channelid)); result.Error != nil {
return
}
}

First与非数字主键一起使用时,需要显式指定要与主键匹配的列。

官方文件:

如果主键是字符串(例如,类似于uuid(,则查询将写如下:

db.First(&user, "id = ?", "1b74413f-f3b8-409f-ac47-e8c062e3472a")
// SELECT * FROM users WHERE id = "1b74413f-f3b8-409f-ac47-e8c062e3472a";

所以在GetGuild中,这是

h.DB.First(&guild, guildid)

应该是这样的:

h.DB.First(&guild, "id = ?", guildid)

最新更新