Heim > Backend-Entwicklung > Golang > Sortieren von Daten nach Fremdschlüsseln mit Go with Gorm

Sortieren von Daten nach Fremdschlüsseln mit Go with Gorm

PHPz
Freigeben: 2024-02-11 16:00:13
nach vorne
821 Leute haben es durchsucht

Sortieren von Daten nach Fremdschlüsseln mit Go with Gorm

php-Editor Xigua stellt Ihnen heute eine Methode zur Verwendung der Go-Sprache und der Gorm-Bibliothek vor, um Daten nach Fremdschlüsseln zu sortieren. In den meisten Datenbanken müssen wir Daten häufig anhand von Feldern sortieren, die mit Fremdschlüsseln verknüpft sind. Durch die Verwendung der Gorm-Bibliothek können wir diese Funktionalität einfach implementieren. In diesem Artikel erfahren Sie, wie Sie die Preload-Methode und die Order-Methode von Gorm verwenden, um die Fremdschlüsselsortierung zu implementieren und so Ihre Datenabfrage flexibler und effizienter zu gestalten. Werfen wir einen Blick auf die konkreten Schritte!

Frageninhalt

Ich weiß nicht, ich bleibe hier... Daher muss ich die Daten nach Fremdschlüsseln sortieren.

Ich habe Code ausprobiert (siehe unten), aber er funktioniert überhaupt nicht.

Das sind meine Strukturdaten:

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:"-"`
}
Nach dem Login kopieren

Ich möchte die Daten nach Rollen sortieren, also habe ich Code wie diesen geschrieben

# 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")
            }
Nach dem Login kopieren

Beides funktioniert nicht. Haben Sie das schon einmal erlebt?

Brauche wirklich deinen Rat...Danke

Lösung

Nachdem ich so viele Referenzen durchgesehen habe, habe ich das herausgefunden. Das ist meine Antwort für den Fall, dass in Zukunft alle vor dem gleichen Problem stehen:

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)
Nach dem Login kopieren

Ich verwende die Join-Methode und kann die Daten basierend auf den vom Rollenmodell verknüpften Feldern bestellen

Das obige ist der detaillierte Inhalt vonSortieren von Daten nach Fremdschlüsseln mit Go with Gorm. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage