表之间的关系

表之间的关系

对orm不理解的需要先上网查询资料了解orm
这里只提供写法

  1. 一对一
  2. 一对多
  3. 多对多

一对一:表之间只存在一个和外键相同的值

 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)"`//多对多,不存在外键
}
posted @ 2021-01-27 19:59  blackTree  阅读(42)  评论(0)    收藏  举报