在 go ent 框架中创建基本实体

我是高朗的新手,并且正在使用ent框架作为ORM。每个模式都应该有字段和,我想写一次,而不是为每个模式编写它,即:created_atupdated_at


func (User) Fields() []ent.Field {

    return []ent.Field{

        field.Int("id"),

        field.String("name").MaxLen(70),

        field.String("email"),

        field.Time("created_at").Default(time.Now).Immutable(),

        field.Time("updated_at").Default(time.Now).UpdateDefault(time.Now),

    }

}


.....


func (Product) Fields() []ent.Field {

    return []ent.Field{

        field.Int("id"),

        field.String("name").MaxLen(70),

        field.Float("price"),

        field.Time("created_at").Default(time.Now).Immutable(),

        field.Time("updated_at").Default(time.Now).UpdateDefault(time.Now),

    }

}

我来自OOP lagnageus,在那里我可以用所有其他实体从中继承的某种东西来做到这一点,但不确定在这种情况下该怎么做。BaseEntity


繁华开满天机
浏览 74回答 1
1回答

拉丁的传说

您可以使用 MixIn,它允许您创建可重用的耳影片段。可以使用组合将架构代码注入到其他架构中,因此,您可以在另一个架构中定义时间戳值,并将其混合在需要的其他架构中,以便您的时间戳(基本实体)mixin架构将如下所示package schemaimport (    "entgo.io/ent"    "entgo.io/ent/schema/field"    "entgo.io/ent/schema/mixin"    "time")type TimeStamp struct {    mixin.Schema}func (TimeStamp) Fields() []ent.Field {    return []ent.Field{        field.Time("created_at").Default(time.Now).Immutable(),        field.Time("updated_at").Default(time.Now).UpdateDefault(time.Now),    }}现在,当它被定义并且您需要将此时间戳架构注入到其他架构中时。为此,您所要做的就是将其注入该架构的MixIn()中,如下所示func (User) Mixin() []ent.Mixin {    return []ent.Mixin{        TimeStamp{},    }}......func (Product) Mixin() []ent.Mixin {    return []ent.Mixin{        TimeStamp{},    }}因此,您的最终架构将如下所示。func (User) Mixin() []ent.Mixin {    return []ent.Mixin{        TimeStamp{},    }}func (User) Fields() []ent.Field {    return []ent.Field{        field.Int("id"),        field.String("name").MaxLen(70),        field.String("email"),    }}.....func (Product) Mixin() []ent.Mixin {    return []ent.Mixin{        TimeStamp{},    }}func (Product) Fields() []ent.Field {    return []ent.Field{        field.Int("id"),        field.String("name").MaxLen(70),        field.Float("price"),    }}此外,ent 还提供了内置的时间混合,可用于将 和 字段添加到架构中,并将其定义为 。create_timeupdate_timemixin.Time{}有关更多详细信息,您可以查看 Mixin
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go