走近科学

tien的随笔

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

简单记录一下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")
}

  

 

 

  待续...

posted on 2021-07-05 22:19  _tien  阅读(65)  评论(0编辑  收藏  举报