0

使用go 1.5, 和gorm.

假设我想制作一个events包含 acreated_by_id和 aupdated_by_id列的表格。

我写我的模型

type By struct {
    ByID sql.NullInt64
    By *User
}

type CreatedBy struct {
    By
}

type UpdatedBy struct {
    By
}

type Event struct {
    CreatedBy
    UpdatedBy
}

当我尝试保存event对象时,by_id将尝试保存列的值而不是created_by_idand的值updated_by_id。我需要做什么来确保属性的列名对于和ByID是不同的?CreatedByUpdatedBy

4

1 回答 1

0

问题是您同时嵌入CreatedByUpdatedByinto Event,因此调用 toEvent.By是模棱两可且不允许的(您必须能够指定Event.CreatedBy.ByEvent.UpdatedBy.By明确地消除这两个字段的歧义)。

最有可能的解决方案是不嵌入类型,而是实际创建一个具有显式字段的结构:

type Event struct {
    CreatedBy CreatedBy
    UpdatedBy UpdatedBy
}

gorm现在应该知道如何消除两列的歧义了。

当然,如果您只想嵌入By列映射CreatedByUpdatedBy用于列映射,那么您不需要声明 new structs:

type By struct {
    ByID sql.NullInt64
    By *User
}

type Event struct {
    CreatedBy By
    UpdatedBy By
}
于 2015-12-27T02:36:38.003 回答