请教下Grom关联查询

infoBrainSys · · 1323 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

### 场景 A(父结构体:Person):姓名 B(子结构体:Hobby):兴趣 当查询 B 表中的`兴趣`时,返回的内容为(姓名,兴趣)这个用户的全部相关信息。 ### 疑问 - 应该如何操作关联查询? - `A`结构体中存在`*gorm.Model`,`B` 结构体中是否也需要嵌入`*gorm.Model`作为表的主键 ### Code ```go package main import ( "Learn/db" "database/sql/driver" "encoding/json" "errors" "fmt" "gorm.io/gorm" ) // 定义数据类型 type Notes []string func (n Notes) Save(value interface{}) error { str, ok := value.([]byte) if !ok { return errors.New("value type not match") } json.Unmarshal(str, &n) return nil } func (n Notes) Value() (driver.Value, error) { str, err := json.Marshal(&n) if err != nil { return nil, err } return string(str), nil } // 定义人相关的结构体 type Person struct { *gorm.Model Name string `gorm:"column:name"` } func (p Person) TableName() string { return "person" } // 定义爱好结构体 type Hobby struct { *Person Code Notes `gorm:"column:code"` } func (b Hobby) TableName() string { return "hobby" } func main() { db, err := db.InitDB() if err != nil { fmt.Println("conn db err: ", err) } db.AutoMigrate(&Person{}, &Hobby{}) var hobby Hobby = Hobby{ Code: Notes{"golang", "python"}, } var person Person = Person{ Name: "tom", } tx := db.Create(&hobby).RowsAffected tc := db.Create(&person).RowsAffected fmt.Println("affected rows: ", tx, tc) } ``` ### 结果 - 表映射创建虽然没有问题,但是`B`表中也存有`A`表中的字段。那如果我不将`B`表使用匿名继承`A`表中的字段,那么得出的两张表没有关联吧。 ![mysql](https://static.golangjob.cn/230211/ee8446a1a4522562283cfdd2b295504d.png) --- 请指点~如果能有demo就更加感谢啦

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1323 次点击  
加入收藏 微博
2 回复  |  直到 2023-02-12 16:09:08
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传