GORM 表一对多自身并且一对多另外一张表
时间: 2023-09-02 20:09:04 浏览: 158
三张表一对多示例
5星 · 资源好评率100%
GORM 是一个优秀的 Go 语言 ORM 框架,可以方便地操作数据库。对于一对多自身的关系,可以使用 GORM 的 `BelongsTo` 和 `HasMany` 方法来定义关系。
例如,假设有一个 `Category` 表,每个分类可以有多个子分类,同时每个分类也属于一个父分类,可以使用以下代码来定义模型:
```go
type Category struct {
ID uint
Name string
ParentID uint
Parent *Category
Children []Category
}
```
其中 `ParentID` 表示该分类的父分类 ID,`Parent` 表示该分类的父分类对象,`Children` 表示该分类的所有子分类。
在 GORM 中,使用 `BelongsTo` 和 `HasMany` 方法来定义这个关系:
```go
db.Model(&Category{}).
BelongsTo("Parent", &Category{}).
HasMany("Children", &Category{}, "ParentID")
```
这样就可以方便地操作一对多自身的关系了。
对于一对多另外一张表的关系,也可以使用类似的方式来定义。假设有一个 `Product` 表,每个产品属于一个分类,而每个分类可以有多个产品,可以使用以下代码来定义模型:
```go
type Product struct {
ID uint
Name string
CategoryID uint
Category Category
}
type Category struct {
ID uint
Name string
Products []Product
}
```
其中 `CategoryID` 表示该产品所属的分类 ID,`Category` 表示该产品所属的分类对象,`Products` 表示该分类的所有产品。
在 GORM 中,可以使用 `BelongsTo` 和 `HasMany` 方法来定义这个关系:
```go
db.Model(&Product{}).
BelongsTo("Category", &Category{})
db.Model(&Category{}).
HasMany("Products", &Product{})
```
这样就可以方便地操作一对多另外一张表的关系了。
阅读全文