我正在使用什么版本的Go(去版)?
转到版本Go 1.9.1 Linux / amd64
我使用哪个数据库及其版本?
sqlite3的
一个完整的可运行程序来重现我的问题:
需要使用GORM's docker compose config运行或请提供您的配置 .
package main
import (
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/sqlite"
)
type A struct {
ID int
Bs [] *B `gorm:"foreignkey:AID"`
}
type B struct {
ID int
AID int
Config Config `gorm:"type:text"`
}
type Config struct {
attr1 int
attr2 string
}
func main() {
Db, err := gorm.Open("sqlite3", "test.db")
if err != nil {
panic(err)
}
Db.CreateTable(&A{})
Db.CreateTable(&B{})
}
但是,test.db的模式是
sqlite> .schema
CREATE TABLE "as" ("id" integer primary key autoincrement );
CREATE TABLE "bs" ("id" integer primary key autoincrement,"a_id" integer );
我们可以看到,没有创建B的 config
属性 . 那么为什么Gorm忽略了 Config
结构?
1 回答
您的数据未规范化 .
Config
是一个包含多个字段的结构 . 您可以使用外键将配置提取到单独的表中,就像使用B
一样:然后在
Config
中定义外键:最后,您创建表: