一对多关系
我们先从一对多开始多表关系的学习因为一对多的关系生活中到处都是,例如:
- 老板与员工
- 女神和添狗
- 老师和学生
- 班级与学生
- 用户与文章
在创建的时候先将没有依赖的创建。表名称+ID就是外键。外键要和关联的外键的数据类型要保持一致。
package main
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
// User 用户表 一个用户拥有多篇文章
type User struct {
ID int64
Name string `gorm:"size:6"`
Articles []Article //用户拥有的文章列表 has many
}
type Article struct {
ID int64 `gorm:"size:4"`
Title string `gorm:"size:16"`
UserID int64 //属于 belongs to 这里的类型要和引用的外键类型一致
User User //属于
}
func (*User) TableName() string {
return "user"
}
func (*Article) TableName() string {
return "article"
}
func main() {
dsn := "root:7PXjAkY!&nlR@tcp(192.168.11.128:3306)/test?charset=utf8mb4&parseTime=True&loc=Local"
db, _ := gorm.Open(mysql.Open(dsn), &gorm.Config{})
db.Debug().AutoMigrate(&User{}, &Article{})
}
[52.373ms] [rows:0] CREATE TABLE `user` (`id` bigint AUTO_INCREMENT,`name` varchar(6),PRIMARY KEY (`id`))
[30.441ms] [rows:0] CREATE TABLE `article` (`id` tinyint AUTO_INCREMENT,`title` varchar(16),`user_id` bigint,PRIMARY KEY (`id`),CONSTRAINT `fk_user_
articles` FOREIGN KEY (`user_id`) REFERENCES `user`(`id`))