dongming4994 2018-01-25 09:51
浏览 12

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

I'm trying to work with postgresql and gorm but I'm encountering the following problem. I have two structs (Tenantx,Userx) with a many2many relationship (this works) plus a field in each one (TenantAdmin,DefaultTenant) which relates to the other struct. Saving and Updating works with all fields except for TenantAdmin and DefaultTenant. When I save a Tenantx object, the TenantAdmin field won't be saved, and updating it won't work (see Output). There are no errors thrown. I would like to know what am I doing wrong here.

Thanks in advance.

package models

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)
}

Output

1 -->  {1 newtenant {0  <nil> <nil>} [{1 user1 <nil> <nil>} {2 user2 <nil> <nil>}]}
  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
    • ¥15 有了解d3和topogram.js库的吗?有偿请教
    • ¥100 任意维数的K均值聚类
    • ¥15 stamps做sbas-insar,时序沉降图怎么画
    • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
    • ¥15 关于#Java#的问题,如何解决?
    • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
    • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
    • ¥15 cmd cl 0x000007b
    • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line