php小編西瓜今天給大家分享一個(gè)使用Go語言和Gorm庫來通過外鍵對(duì)數(shù)據(jù)進(jìn)行排序的方法。在大多數(shù)數(shù)據(jù)庫中,我們經(jīng)常需要根據(jù)外鍵關(guān)聯(lián)的字段對(duì)數(shù)據(jù)進(jìn)行排序。通過使用Gorm庫,我們可以輕松地實(shí)現(xiàn)這一功能。本文將教你如何使用Gorm的Preload方法和Order方法來實(shí)現(xiàn)外鍵排序,讓你的數(shù)據(jù)查詢更加靈活和高效。讓我們一起來看看具體的操作步驟吧!
問題內(nèi)容
我不知道,一直呆在這里……
所以我需要根據(jù)外鍵對(duì)數(shù)據(jù)進(jìn)行排序。
我一直在嘗試一些代碼(見下文),但根本不起作用。
這是我的結(jié)構(gòu)數(shù)據(jù):
type User struct { ID string `gorm:"primarykey" json:"id"` Name string `gorm:"not null" json:"name"` Email string `gorm:"unique" json:"email"` Password string `gorm:"not null" json:"password"` Phone string `json:"phone"` AccountType string `json:"account_type"` Key string `json:"key"` RoleID string `gorm:"not null" json:"role_id"` Role role.Role `gorm:"foreignKey:RoleID" json:"role"` CreatedAt time.Time `json:"-"` UpdatedAt time.Time `json:"-"` DeletedAt gorm.DeletedAt `gorm:"index" json:"-"` } type Role struct { ID string `gorm:"primarykey" json:"id"` Name string `gorm:"not null" json:"name"` TierLevel uint `gorm:"not null" json:"tier_level"` CreatedAt time.Time `gorm:"not null;default:current_timestamp" json:"-"` UpdatedAt time.Time `gorm:"not null;default:current_timestamp" json:"-"` DeletedAt gorm.DeletedAt `gorm:"index" json:"-"` }
登錄后復(fù)制
我想根據(jù)角色對(duì)數(shù)據(jù)進(jìn)行排序,所以我寫了這樣的代碼
# my first trying # result = query.Preload("Role", func(db *gorm.DB) *gorm.DB { return db.Order(orderString) }).Limit(limit).Offset(offset).Find(&users) # my second trying # result = query.Preload("Role").Limit(limit).Offset(offset).Find(&users) roles := []roleModel.Role{} --> this roleModel had been importing in this file for i := range roles { result.Model(&roles[i]).Order("roles.name ASC") }
登錄后復(fù)制
兩者都不起作用,你們以前經(jīng)歷過這種情況嗎?
真的需要您的建議…謝謝
解決方法
所以,在瀏覽了這么多參考資料之后,我明白了這一點(diǎn)。這就是我的答案,以防將來每個(gè)人都面臨同樣的問題:
parts := strings.Split(sortBy, ".") --> this sortBy was kind of like "role.name" field := strings.TrimSpace(parts[1]) orderString = fmt.Sprintf("roles.%s %s", field, sortOrder) result = query.Limit(limit).Offset(offset).Joins("JOIN roles ON users.role_id = roles.id").Order(orderString).Find(&users)
登錄后復(fù)制
我使用連接方法,我可以根據(jù)從角色模型連接的字段來訂購(gòu)數(shù)據(jù)