本教材由知了传课辛苦制作而成,仅供学习使用,请勿用于商业用途!如进行转载请务必注明出处!谢谢!

模型定义

用作数据库数据转换和自动建表

一、模型名和表名映射

1.模型名和表名的映射规则:除了开头的大写字母以外,遇到大写会增加 _,原名称中的下划线保留。

  • Article -> article
  • AuthUser -> auth_user
  • Auth_User -> auth__user 两个下划线
  • DB_AuthUser -> d_b__auth_user

2.自定义表名

type User struct { Id int Name string } func (u *User) TableName() string { return "auth_user" }

二、设置参数:使用structtag

1.忽略字段structtag:`orm:"-"`

2.pk设置为主键,适用于自定义其他类型为主键

3.null:Name string `orm:“null”`

4.auto:自增长

Id int orm:"pk;auto"

5.index:索引

Name string orm:"index"

索引的作用:优化查询,相当于图书的目录

6.unique

Name string orm:"unique"

7.column

Name string orm:"column(user_name)"

8.size:对string起作用

Title string orm:"size(60)"

9.digits / decimals 4 2 12.21

Money float64 orm:"digits(12);decimals(4)" 总长度12,小数点后有4位小数

10.auto_now / auto_now_add

Created time.Time orm:"auto_now_add;type(datetime)"
Updated time.Time orm:"auto_now;type(datetime)"

auto_now 每次 model 保存时都会对时间自动更新

auto_now_add 第一次保存时才设置时间

11.type:日期还是时间

Created time.Time orm:"auto_now_add;type(date)"
Created time.Time orm:"auto_now_add;type(datetime)"

12.default

Gender float64 orm:"default(0)"

13.description

修改源码:cmd_utils.go的 getColumnAddQuery()最后加:fi.description,

Name string orm:"description(这是标签名称)"

三、表关系

1.一对一

  • User模型中: Profile *Profile `orm:“rel(one)”` 正向关系,有外键字段
  • Profile模型中: User *User `orm:“reverse(one)”` 反向关系,只是关系,没有外键

2.一对多

  • article模型中:User *User `orm:“rel(fk)”` 正向关系,有外键,外键在多的一方
  • user模型中:Articles []*Articles `orm:“reverse(many)” 反向关系,没有外键

一对多,外键在多的一方

3.多对多

  • post模型中:Tags []*Tag `orm:“rel(m2m)”` 正向关系,没有外键
  • tag模型中:Posts []*Post `orm:“reverse(many)”` 反向关系,没有外键

1706人已阅读,今天你学习了吗?

添加新回复