多对多:保存和更新单个结构不起作用

时间:2018-01-25 09:51:51

标签: postgresql go go-gorm

我正在尝试使用postgresql和gorm,但我遇到了以下问题。我有两个结构(TenantxUserx),其中有很多关系(这个有效),另外还有一个字段(TenantAdminDefaultTenant)与其他结构有关。保存和更新适用于TenantAdminDefaultTenant以外的所有字段。保存Tenantx对象时,TenantAdmin字段将不会保存,更新它将不起作用(请参阅输出)。没有抛出任何错误。我想知道我在这里做错了什么。

提前致谢。

包装模型

type Tenantx struct {
    ID          uint   `gorm:"primary_key"`
    Name        string `gorm:"not null;unique"`
    TenantAdmin Userx
    Users       []Userx `gorm:"many2many:tenantx_userx;"`
}

type Userx struct {
    ID            uint       `gorm:"primary_key"`
    Username      string     `gorm:"not null;unique"`
    DefaultTenant *Tenantx   
    Tenants       *[]Tenantx `gorm:"many2many:tenantx_userx;"`
}

main.go

func main() {
    var err error
    repo.DB, err = gorm.Open("postgres", "host=xxx user=xxx dbname=xxx sslmode=disable password=xxx")
    if err != nil {
        panic("failed to connect database")
    }
    defer repo.DB.Close()

    repo.DB.CreateTable(&models.Tenantx{}, &models.Userx{})

    tenant1 := models.Tenantx{
        Name:        "newtenant",
        TenantAdmin: models.Userx{Username: "usertest"}, //--> Doesn't work
    }

    user1 := models.Userx{Username: "user1"}
    user2 := models.Userx{Username: "user2"}
    repo.DB.Save(&tenant1)

    //Update
    repo.DB.Model(&tenant1).Association("Users").Append([]*models.Userx{&user1})
    repo.DB.Model(&tenant1).Association("Users").Append([]*models.Userx{&user2})
    repo.DB.Model(&tenant1).Association("TenantAdmin").Append(user1) //<--Doesn't work

    //Search and Print
    var gettenant models.Tenantx
    var getuser []models.Userx
    repo.DB.First(&gettenant, "name = ?", "newtenant")
    fmt.Println(gettenant)
    repo.DB.Model(&gettenant).Related(&getuser, "Users")
    gettenant.Users = getuser
    fmt.Println("1 --> ", gettenant)
}

输出

1 -->  {1 newtenant {0  <nil> <nil>} [{1 user1 <nil> <nil>} {2 user2 <nil> <nil>}]}

0 个答案:

没有答案