Heim > Artikel > Backend-Entwicklung > 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!
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:"-"` }
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") }
Beides funktioniert nicht. Haben Sie das schon einmal erlebt?
Brauche wirklich deinen Rat...Danke
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)
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!