Rumah > pembangunan bahagian belakang > Golang > Mengisih data mengikut kekunci asing menggunakan Go with Gorm

Mengisih data mengikut kekunci asing menggunakan Go with Gorm

PHPz
Lepaskan: 2024-02-11 16:00:13
ke hadapan
828 orang telah melayarinya

Mengisih data mengikut kekunci asing menggunakan Go with Gorm

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!

Kandungan soalan

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:"-"`
}
Salin selepas log masuk

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")
            }
Salin selepas log masuk

Kedua-duanya tidak berkesan, adakah anda pernah mengalami perkara ini sebelum ini?

Sangat memerlukan nasihat anda...Terima kasih

Penyelesaian

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)
Salin selepas log masuk

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!

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan