11888

gorm 实现 mysql 的 json 类型,文档上没有给出明确的案例。 通过 issues 得知,只要为 struct 实现 Value Scan 方法就可以作为 json 格式存储在 mysql 中。

定义 model

// User 用户
type User struct {
	gorm.Model
  Name string `gorm:"comment:'用户名'"`
	Profile Profile `gorm:"type:json;comment:'个人信息'"`
// Profile 个人信息
type Profile struct {
	Email string `json:"email"`
	PhoneNo string `json:"phoneNo"`
// Value 实现方法
func (p Profile) Value() (driver.Value, error) {
	return json.Marshal(p
// Scan 实现方法
func (p Profile) Scan(input interface{}) error {
	return json.Unmarshal(input.([]byte), p)
复制代码

新增&编辑

db, err := gorm.Open(/* open mysql ... */)
u := User{
	Name: "Clancey",
	Profile: Profile{
		Email: "ClanceyLu@gmail.com",
		PhoneNo: "18888888888",
db.Save(&u)
u.Profile.PhoneNo = "13666666666"
db.Save(&u)
// or
db.Where("id = ?", u.ID).
	Updates(&u)
复制代码

查找

var u User
	Where("profile->'$.email' = (?)", "ClanceyLu@gmail.com").
	First(&u)
复制代码
分类:
后端
标签: