模型定义
用作数据库数据转换和自动建表
一、模型名和表名映射
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)”` 反向关系,没有外键