简单记录一下gorm中常用方法的用途
// User 用户模型 type User struct { gorm.Model NickName string `gorm:"type:varchar(128)" json:"nickName"` // 昵称 Phone string `gorm:"type:varchar(11)" json:"phone"` // 手机号 Email string `gorm:"type:varchar(128)" json:"email"` //邮箱 } // TableName 指定表名 func (User) TableName() string { return "user" }
创建model时 如果加上gorm.Model 会默认增加id、create_at、updated_at、deleted_at四个字段,其中id默认为自增主键。
各字段的定义 可以写在struct的tag标签中
例如: gorm:"type:char(10);not null;default '';unique" 使用 ; 分隔,默认会采用下划线的方式创建表字段
- gorm连接MySQL
// xxxx 是连接MySQL需要的参数 想要正确的处理time.Time
,要带上parseTime,loc是指定时区
// 格式:用户:密码@tcp(主机:端口)/库名?charset=utf8&parseTime=True&loc=Local
// db就是数据库的连接了 可以开始愉快的curd了 db, err := gorm.Open("mysql",xxxx)
defer db.Close()
使用 db.AutoMigrate(&User{}) 来创建、更新user表结构
使用 db.SingularTable(true) 可以让gorm创建表时表名不要自动加s变成复数的形式
连表查询比如 select a.*,b.name,c.id 之类的 可以定义一个全新的结构体来接收
// 连表查询时 type ArticleCate struct { model.Article Name string `json:"category_name"` Phone string `json:"phone"` } func (this ArticleController) Show(ctx *gin.Context) { id := ctx.Param("id") var art ArticleCate notFound := this.db.Table(model.Article{}.TableName()).Select("articles.*,u.phone,ca.name").Joins("left join category ca on ca.id=articles.category_id"). Joins("left join users u on u.id=articles.user_id").Where("articles.id=?", id).First(&art).RecordNotFound() if id == "" || notFound { response.Fail(ctx, "文章不存在", nil) return } response.Success(ctx, gin.H{"data": art}, "success") }
待续...
每天都是不想努力的一天....