表之间的关系

表之间的关系

对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 @   blackTree  阅读(34)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示