自动在 gorm 中插入哈希编码数据

insert hash coded data in gorm automatically

我有一个 table 代表我的用户数据。有一个字段表示 phone 数字,我想在更新或插入时自动将其哈希存储在数据库中。 所以我的模型是:

type Users struct {
    gorm.Model
    ID          uint          `gorm:"autoIncrement;unique" json:"id"`
    PhoneNumber string        `json:"phone_number"`
    HashID      string        `gorm:"primaryKey" json:"hash_id"`
    Name        string        `gorm:"default:dear user" json:"name"`
    Rank        uint          `json:"rank"`
    Score       uint          `json:"score"`
    Image       string        `json:"image"`
    Email       string        `json:"email"`
    Address     string        `json:"address"`
    Birthday    string        `json:"birthday"`
    Biography   string        `json:"biography"
}

如何在插入或更新数据时告诉 GORM 用 PhoneNumber 列的 sha256 哈希码填充 HashID 列?

你需要这样的东西:

package main

import (
    "crypto/sha256"

    "fmt"

    "gorm.io/driver/sqlite"
    "gorm.io/gorm"
)

type Users struct {
    gorm.Model
    Key  string `json:"phone_number"`
    Hash string `gorm:"primaryKey" json:"hash_id"`
}

func (u *Users) BeforeCreate(tx *gorm.DB) (err error) {
    h := sha256.Sum256([]byte(u.Key))
    u.Hash = fmt.Sprintf("%x", h[:])
    return nil
}

func (u *Users) BeforeSave(tx *gorm.DB) (err error) {
    h := sha256.Sum256([]byte(u.Key))
    u.Hash = fmt.Sprintf("%x", h[:])
    return nil
}

func main() {
    db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
    if err != nil {
        panic("failed to connect database")
    }

    db.AutoMigrate(&Users{})

    u := Users{Key: "123"}
    db.Create(&u)
}

勾选https://gorm.io/docs/index.html