editor php Xigua hari ini berkongsi dengan anda kaedah menggunakan bahasa Go dan perpustakaan Gorm untuk mengisih data mengikut kekunci asing. Dalam kebanyakan pangkalan data, kita selalunya perlu mengisih data berdasarkan medan yang dikaitkan dengan kunci asing. Dengan menggunakan perpustakaan Gorm, kami boleh melaksanakan fungsi ini dengan mudah. Artikel ini akan mengajar anda cara menggunakan kaedah Pramuat Gorm dan kaedah Pesanan untuk melaksanakan pengisihan kunci asing, menjadikan pertanyaan data anda lebih fleksibel dan cekap. Mari kita lihat langkah-langkah khusus!
Saya tidak tahu, saya telah tinggal di sini... Jadi saya perlu mengisih data berdasarkan kunci asing.
Saya telah mencuba beberapa kod (lihat di bawah) tetapi ia tidak berfungsi sama sekali.
Ini adalah data struktur saya:
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:"-"` }
Saya mahu mengisih data berdasarkan peranan, jadi saya menulis kod seperti ini
# 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") }
Kedua-duanya tidak berkesan, adakah anda pernah mengalami perkara ini sebelum ini?
Sangat memerlukan nasihat anda...Terima kasih
Jadi, selepas menyemak imbas begitu banyak rujukan, saya mengetahui perkara ini. Ini jawapan saya sekiranya semua orang menghadapi masalah yang sama pada masa hadapan:
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)
Saya menggunakan kaedah sertai dan saya boleh memesan data berdasarkan medan yang disertai daripada model peranan
Atas ialah kandungan terperinci Mengisih data mengikut kekunci asing menggunakan Go with Gorm. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!