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

Sortieren von Daten nach Fremdschlüsseln mit Go with Gorm

PHPz
PHPznach vorne
2024-02-11 16:00:13813Durchsuche

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

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

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)

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen