首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得多对多数据关联

如何获得多对多数据关联
EN

Stack Overflow用户
提问于 2019-06-29 15:47:33
回答 1查看 181关注 0票数 1

我是Go gorm协会的新手。我有这样的代码:

代码语言:javascript
复制
package main

import (
    _ "database/sql"
    "fmt"

    _ "github.com/go-sql-driver/mysql"
    "github.com/jinzhu/gorm"
)

type User struct {
    ID   uint `gorm:"primary_key"`
    Name string
}

type Event struct {
    ID        uint `gorm:"primary_key"`
    EventName string
    Users     []User `gorm:"many2many:event_reviews;"`
}

type EventReview struct {
    UserID  uint
    EventID uint
    Rating  float64
    Review  string
}

func main() {
    db, _ := gorm.Open("mysql", "root:@tcp(127.0.0.1:3306)/test1?charset=utf8&parseTime=True")
    defer db.Close()
    db.DropTableIfExists(&EventReview{}, &Event{}, &User{})
    db.AutoMigrate(&User{}, &Event{}, &EventReview{})

    //All foreign keys need to define here
    db.Model(EventReview{}).AddForeignKey("user_id", "users(id)", "CASCADE", "CASCADE")
    db.Model(EventReview{}).AddForeignKey("event_id", "events(id)", "CASCADE", "CASCADE")

    user := User{Name: "John"}
    db.Create(&user)
    event := Event{EventName: "Learning Go"}
    db.Create(&event)
    eventReview := EventReview{UserID: user.ID, EventID: event.ID, Rating: 2.5, Review: "ExcelentEvent"}
    db.Create(&eventReview)

    //Fetching
    eventFetch := &Event{}
    db.Preload("Users").First(&eventFetch)
    fmt.Println(eventFetch)
}

我有struct User,Event,Event Review。事件与用户有多对多的关系。我已经阅读了gorm docs associaton Gorm associaton many to many,但我很难从事件评论中获得数据。

结果打印:

代码语言:javascript
复制
&{1 Learning Go [{1 John}]}

预期结果:

代码语言:javascript
复制
&{1 Learning Go [{1 John 2.5 ExcelentEvent}]}

如何得到预期的结果?我使用多对多关系表是错误的吗?

EN

回答 1

Stack Overflow用户

发布于 2019-06-29 16:16:09

使用相关方法:

代码语言:javascript
复制
db.Model(&dm.User{}).Related(&dm.EventReview{}, "user_id")
res:=QueryByStructExample(dm.User{Email: "email@example.com})



 func QueryByStructExample(userStruct User) []User {
        var results []dm.User
        GormDB.Where(userStruct).Find(&results)
        return results
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56815932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档