分享
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。
### 场景
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`表中的字段,那么得出的两张表没有关联吧。

---
请指点〜如果能有demo就更加感谢啦
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信1780 次点击
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传