我有一个工作查询,其中一个字段是通过子查询设置的:
// recreate a new user admin with the correct token
db.
Save(&Token{
Value: adminToken,
User: User{
UserName: "admin",
IsAdmin: true,
UserType: dbGetUserTypeByName("secops"), // ← this line
},
})UserType是类型的
// UserType is the type of the user: internal, external, ...
type UserType struct {
ID uint
Name string
UserID uint // backref to User has-many
}表被初始化为
db.Create([]UserType{
{Name: ""}, // empty: will be the default for just a main courante
{Name: "secops"},
{Name: "company"},
{Name: "external"},
{Name: "api"},
})最后,子查询dbGetUserTypeByName()
func dbGetUserTypeByName(name string) (userType UserType) {
db.
Where(UserType{Name: name}).
First(&userType)
return userType
}所有这些都很好,我的问题是:在初始化问题中的第一个条目时,可以直接使用dbGetUserTypeByName() 中的查询结果吗?
换句话说:是否有一种方法可以跳过助手函数dbGetUserTypeByName的使用?
在我看来(我对GORM或SQL没有经验),db.*调用返回的内容是DB类型,并且不包含查询的实际结果(在作为引用传递的变量中检索)。
我想象,在不工作的伪戈姆码中,大概是:
// recreate a new user admin with the correct token
db.
Save(&Token{
Value: adminToken,
User: User{
UserName: "admin",
IsAdmin: true,
UserType: db.Where(UserType{Name: "secops"}).First(), // ← this does not work of course, but you get the idea
},
})发布于 2022-04-06 13:37:30
一些GORMS方法,如db.Save ()和db.Create(),返回带有参数的结果。在参数中,您可以找到一个名为值的方法,它包含返回结果参数。
示例:
type Entity struct {
ID string `json:"id"`
Title string `json:"title"`
}func CreateEntity (createEntity Entity) (creaeteEntityDB *Entity, err error) {
result := r.db.Create(&createEntity)
er := result.Error
if er != nil {
return nil, err
}
return &createEntity, nil
}第二方法
也可以使用值参数。
func CreateEntity (createEntity Entity) (creaeteEntityDB interface{}, err error) {
result := r.db.Create(&createEntity)
er := result.Error
if er != nil {
return nil, err
}
return result.Value, nil
}但我个人建议使用第一种方法,因为默认情况下,Gorm不键入参数值。值参数的类型类似于interface{},这与任何类型一样。

https://stackoverflow.com/questions/71441507
复制相似问题