ホームページ >バックエンド開発 >Golang >GORM で外部キー制約を定義して使用する方法は?

GORM で外部キー制約を定義して使用する方法は?

DDD
DDDオリジナル
2024-12-13 06:12:19786ブラウズ

How to Define and Use Foreign Key Constraints in GORM?

GORM で外部キー制約を定義して使用する方法?

データベース設計の領域では、外部キーは関係を確立し、データの整合性を維持する上で重要な役割を果たします。 。 GORM ユーザーにとって、外部キー制約の定義方法と使用方法を理解することは不可欠です。

問題の理解

質問で説明されているシナリオを考えてみましょう。User と UserInfo という 2 つのモデルがあります。 UserInfo の UID フィールドと User の id フィールドの間に外部キー関係を確立する必要があります。

GORM の外部キー生成

2.0 より前の GORM バージョンでは、外部キーを手動で定義する必要がありました。 AddForeignKey メソッドを使用してキー制約を設定します。 GORM 2.0 以降では、この手順は必要ありません。

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

自動外部キー定義

ただし、GORM の古いバージョンでは、以下に示すように外部キーを定義できます。

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

この例では、外部キー関係 menggunakan を定義していることに注意してください。 gorm:"foreignkey:..." および gorm:"association_foreignkey:..." アノテーション。

コードでの外部キー値の設定

次に、外部キー値の設定の問題に対処しましょう。正しく。提供されたコードでは:

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
}

User インスタンスを作成した後、userInfo.UID を user.ID に設定します。このアプローチは有効であり、外部キー関係を正しく確立します。

結論として、外部キー関係とその GORM での実装を理解することは、データベース駆動型アプリケーションでデータの整合性を維持するために重要です。推奨される解決策と注釈に従うことで、GORM モデルで外部キー制約を効果的に定義して利用できます。

以上がGORM で外部キー制約を定義して使用する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。