GORM 把结构体数据传入另一个结构体的结构体切片字段里
时间: 2023-11-02 17:01:12 浏览: 152
可以通过使用 GORM 的 Select 和 Scan 方法实现将结构体数据传入另一个结构体的结构体切片字段里。
假设有两个结构体:
```go
type User struct {
ID uint `gorm:"primaryKey"`
Name string `gorm:"not null"`
}
type Group struct {
ID uint `gorm:"primaryKey"`
Name string `gorm:"not null"`
Users []User `gorm:"-"`
UserID uint `gorm:"not null"`
}
```
其中,Group 结构体中的 Users 字段是一个结构体切片,表示该组中的所有用户。UserID 字段是 User 的外键。
现在想要将一些 User 数据传入到 Group 结构体的 Users 字段中,可以使用 GORM 的 Select 和 Scan 方法实现。具体步骤如下:
1. 根据条件查询出需要的 User 数据,比如:
```go
var users []User
db.Where("name in (?)", []string{"Tom", "Jerry"}).Find(&users)
```
2. 将查询出的 User 数据转化为 Group 结构体中的 Users 字段所需的切片类型:
```go
var groupUsers []GroupUser
for _, user := range users {
groupUsers = append(groupUsers, GroupUser{
ID: user.ID,
Name: user.Name,
})
}
```
其中,GroupUser 是一个用于转化 User 数据的结构体:
```go
type GroupUser struct {
ID uint `gorm:"primaryKey"`
Name string `gorm:"not null"`
}
```
3. 将转化后的 groupUsers 切片赋值给 Group 结构体的 Users 字段:
```go
var group Group
db.Where("id = ?", 1).First(&group)
group.Users = groupUsers
db.Save(&group)
```
通过以上步骤,就可以将查询出的 User 数据传入到 Group 结构体的 Users 字段中了。
阅读全文