我正在尝试使用postgresql和gorm,但我遇到了以下问题。我有两个结构(Tenantx
,Userx
),其中有很多关系(这个有效),另外还有一个字段(TenantAdmin
,DefaultTenant
)与其他结构有关。保存和更新适用于TenantAdmin
和DefaultTenant
以外的所有字段。保存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>}]}