Maison >développement back-end >Golang >Comment définir et utiliser les contraintes de clé étrangère dans GORM ?

Comment définir et utiliser les contraintes de clé étrangère dans GORM ?

DDD
DDDoriginal
2024-12-13 06:12:19785parcourir

How to Define and Use Foreign Key Constraints in GORM?

Comment définir et utiliser une contrainte de clé étrangère dans GORM ?

Dans le domaine de la conception de bases de données, les clés étrangères jouent un rôle crucial dans l'établissement de relations et le maintien de l'intégrité des données. . Pour les utilisateurs de GORM, comprendre comment définir et utiliser les contraintes de clé étrangère est essentiel.

Comprendre le problème

Considérez le scénario décrit dans la question, où nous avons deux modèles : User et UserInfo. Nous devons établir une relation de clé étrangère entre le champ UID dans UserInfo et le champ id dans User.

Génération de clé étrangère de GORM

Dans les versions GORM antérieures à 2.0, nous devions définir manuellement la clé étrangère contraintes clés à l’aide de la méthode AddForeignKey. Dans GORM 2.0 et versions ultérieures, cette étape n'est plus nécessaire.

// GORM version 1.x
db.Model(&models.UserInfo{}).AddForeignKey("u_id", "t_user(id)", "RESTRICT", "RESTRICT")

Définition automatisée des clés étrangères

Cependant, pour les anciennes versions de GORM, nous pouvons toujours définir des clés étrangères comme indiqué ci-dessous.

type User struct {
    DBBase
    Email    string `gorm:"column:email" json:"email"`
    Password string `gorm:"column:password" json:"-"`
}

func (User) TableName() string {
    return "t_user"
}

type UserInfo struct {
    User      User   `gorm:"foreignkey:u_id;association_foreignkey:id"`
    UID       uint   `gorm:"column:u_id" json:"-"`
    FirstName string `gorm:"column:first_name" json:"first_name"`
    LastName  string `gorm:"column:last_name" json:"last_name"`
    Phone     string `gorm:"column:phone" json:"phone"`
    Address   string `gorm:"column:address" json:"address"`
}

func (UserInfo) TableName() string {
    return "t_user_info"
}

Notez que dans cet exemple, nous définissons la relation de clé étrangère avec le gorm:"foreignkey:..." et gorm:"association_foreignkey:..." annotations.

Définition des valeurs de clé étrangère dans le code

Ensuite, abordons la question de la définition correcte des valeurs de clé étrangère. Dans le code fourni :

func (dao *AuthDAO) Register(rs app.RequestScope, user *models.User, userInfo *models.UserInfo) (userErr error, userInfoErr error) {
    createUser := rs.Db().Create(&user)
    userInfo.UID = user.ID
    createUserInfo := rs.Db().Create(&userInfo)

    return createUser.Error, createUserInfo.Error
}

Nous définissons userInfo.UID sur user.ID après avoir créé l'instance User. Cette approche est valide et établira correctement la relation de clé étrangère.

En conclusion, comprendre les relations de clé étrangère et leur mise en œuvre dans GORM est crucial pour maintenir l'intégrité des données dans les applications basées sur des bases de données. En suivant les solutions et annotations suggérées, vous pouvez définir et utiliser efficacement les contraintes de clé étrangère dans vos modèles GORM.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn