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

Mengisih data mengikut kekunci asing menggunakan Go with Gorm

PHPz
PHPzke hadapan
2024-02-11 16:00:13764semak imbas

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:"-"`
}

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

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)

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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam