表之间的关系
表之间的关系
对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)"`//多对多,不存在外键
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗