ad表的字段为id, account ad_user表为ad和user的中间表,字段为 id,user_id, ad_id, user表的字段为 id,name,ad表和user表是多对多关系 在goframe框架对以上表的多对多查询,并输出以下结果: “list”: { "id": 1, "account":"a1", "account_user”: [ { "user_id": 1, "name": “Alice” }, { "id": 2, "name": “ella” } ]
时间: 2024-01-25 20:04:53 浏览: 116
可以使用 GORM 库进行多对多查询,以下是示例代码:
```
type Ad struct {
ID int `gorm:"column:id"`
Account string `gorm:"column:account"`
Users []User `gorm:"many2many:ad_user"`
}
type User struct {
ID int `gorm:"column:id"`
Name string `gorm:"column:name"`
}
var result struct {
ID int `json:"id"`
Account string `json:"account"`
AccountUsers []struct {
UserID int `json:"user_id"`
Name string `json:"name"`
} `json:"account_user"`
}
db.Table("ad").
Select("ad.id, ad.account, user.id as user_id, user.name").
Joins("JOIN ad_user ON ad.id = ad_user.ad_id").
Joins("JOIN user ON ad_user.user_id = user.id").
Scan(&result)
// 将 result 转换为 JSON 格式输出
resultJSON, _ := json.Marshal(map[string]interface{}{
"list": result,
})
fmt.Println(string(resultJSON))
```
这段代码会查询出所有的 Ad 记录,并且将其关联的 User 记录也查询出来,最后将结果转换为 JSON 格式输出。输出的结果应该符合要求。
阅读全文