表之间的关系
表之间的关系
对orm不理解的需要先上网查询资料了解orm
这里只提供写法
- 一对一
- 一对多
- 多对多
一对一:表之间只存在一个和外键相同的值
type user struct {
//模型定义
ID int `orm:"pk;auto;column(ID)"` //设置主键自增长
Name string `orm:"unqiue;null"`
Age int `orm:"null"`
Addr string `orm:"column(Address);null"`
UpdatedTime time.Time `orm:"auto_now;type(datetime)"`
//beego 模型建表的外键是在表中添加一个字段模拟外键,不是mysql中实际的外键
Profile *profile `orm:"rel(one)"` //存在外键
}
//结构体作为 其他模型的对象时,首字母要大写
type profile struct {
ID int `orm:"pk;auto;column(ID)"` //设置主键自增长
Content string `orm:"default()"`
User *user `orm:"reverse(one)"` //和user模型添加关系,没有外键
}
一对多:表之间其中一张表允许存在多个外键相同的值
外键在多的一方
type user struct {
//模型定义
ID int `orm:"pk;auto;column(ID)"` //设置主键自增长
Name string `orm:"unqiue;null"`
Age int `orm:"null"`
Addr string `orm:"column(Address);null"`
UpdatedTime time.Time `orm:"auto_now;type(datetime)"`
//beego 模型建表的外键是在表中添加一个字段模拟外键,不是mysql中实际的外键
Articles []*article `orm:"reverse(many)"` //和article模型添加关系
}
type article struct {
ID int `orm:"pk;auto;column(ID)"` //设置主键自增长
Author string `orm:"default()"` //文章可以对应多个作家
User *user `orm:"rel(fk)"` //设置一对多关系,和user模型添加关系,外键在多的一方
}
多对多
多对多的是多一张额外的外键中间表,所以模型之间是没有外键的,
type post struct {
ID int `orm:"pk;auto;column(ID)"` //设置主键自增长
Title string `orm:"default()"`
Tag []*tag `orm:"rel(m2m)"` //多对多,不存在外键
}
type tag struct {
ID int `orm:"pk;auto;column(ID)"` //设置主键自增长
Name string `orm:"default()"`
Posts []*post `orm:"reverse(many)"`//多对多,不存在外键
}

浙公网安备 33010602011771号