首页 文章

无法让GORM协会按预期工作

提问于
浏览
0

我的两个模特是

package models

// Business ...
type Business struct {
    ID     uint
    Name   string `gorm:"not null"`
    Tables Tables `gorm:"ForeignKey:BusinessID"`
}

// Businesses ...
type Businesses []Business

package models

// Table ...
type Table struct {
    ID         uint
    Ref        string `gorm:"not null"`
    Business   Business
    BusinessID uint
}

// Tables ...
type Tables []Table

从代码中可以明显看出,但关联应该是“业务”有很多“表”而“表”属于“业务” . 但是,在创建数据库时,没有创建外键(我正在使用sqlite3),当我返回已创建的业务时

bus := models.Business{
        Name: "Test",
        Tables: models.Tables{
        models.Table{Ref: "A1"},
    },
}
db.Create(&bus)

BUSINESS数组为空,虽然business_id正确但返回表时,业务结构也是空的 .

1 回答

  • 1

    我无法重现你的问题 . 我这里有一个有效的解决方案 . 我怀疑它不适用于单独的模型包中的实体,但这也有效 .

    package main
    
    import (
        "log"
    
        "github.com/jinzhu/gorm"
        _ "github.com/jinzhu/gorm/dialects/sqlite"
        _ "github.com/mattn/go-sqlite3"
    )
    
    type Business struct {
        ID     uint
        Name   string `gorm:"not null"`
        Tables Tables `gorm:"ForeignKey:BusinessID"`
    }
    
    type Table struct {
        ID         uint
        Ref        string `gorm:"not null"`
        Business   Business
        BusinessID uint
    }
    
    type Tables []Table
    type Businesses []Business
    
    func main() {
        var err error
        var db *gorm.DB
    
        db, err = gorm.Open("sqlite3", "test.db")
        if err != nil {
            log.Fatal(err)
        }
    
        defer db.Close()
    
        db.LogMode(true)
        db.AutoMigrate(&Business{})
        db.AutoMigrate(&Table{})
    
        bus := Business{
            Name: "Test",
            Tables: Tables{
                Table{Ref: "A1"},
            },
        }
        db.Create(&bus)
        var businesses Businesses
        db.Preload("Tables").Find(&businesses)
        log.Println(businesses)
    }
    

相关问题