duanjian9148 2016-11-21 13:34
浏览 67

Gorm-与匿名字段有一种关系

I use Golang and GORM. I have a User structure which has one Association.

type User struct {
    ID       int
    ...
}

type Association struct {
    ID       int
    UserID   int
}

I also have an AssoUser structure, which is composed of a anonymous field User, and has a pointer to Assocation.

type AssoUser struct {
    User
    Asso *Association
}

When I run

var assoUser AssoUser
assoUser.Asso = &Association{
   Name : "asso_name",
   ...
}
assoUser.Name = "user_name"
...

// filling the struct
db.Debug().Create(&assoUser)

I expect it to create the User AND the Association, but it only creates the User.

What am I doing wrong ?

  • 写回答

1条回答 默认 最新

  • doukeng7426 2017-02-01 00:29
    关注

    I was having a similar issue, but I discovered it was an issue with anonymous types.

    If you have

    type Thing struct {
        Identifier string
        ext
    }
    
    type ext struct {
        ExtValue string
    }
    

    gorm won't be able to find ext, so it won't appear in the table at all.

    However, if you have

    type Thing struct {
        Identifier string
        Ext
    }
    
    type Ext struct {
        ExtValue string
    }
    

    ExtValue will appear in the table as a normal string, as if it were a part of the Thing object.

    If you want to make a has-one relationship, you have to include an id in your struct. So the above example would look like this:

    type Thing struct {
        Identifier string
        Ext
    }
    
    type Ext struct {
        ThingId  uint
        ExtValue string
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)