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)
复制代码