go version
)?Go version 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&#39 {s} config
属性未创建。
那么为什么Gorm忽略了Config
结构?
答案 0 :(得分:1)
您的数据未规范化。 Config
是一个包含多个字段的结构。您可以使用外键将配置提取到单独的表中,就像使用B
:
type B struct {
ID int
AID int
Config Config `gorm:"foreignkey:BID"`
}
然后在Config
中定义外键:
type Config struct {
BID int
attr1 int
attr2 string
}
最后,您创建表格:
Db.CreateTable(&Config{})