为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
繁华开满天机 2022-09-26 17:46:36
我是高朗的新手,并且正在使用ent框架作为ORM。每个模式都应该有字段和,我想写一次,而不是为每个模式编写它,即:created_atupdated_atfunc (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
查看完整描述

1 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

您可以使用 MixIn,它允许您创建可重用的耳影片段。可以使用组合将架构代码注入到其他架构中,因此,您可以在另一个架构中定义时间戳值,并将其混合在需要的其他架构中,以便您的时间戳(基本实体)mixin架构将如下所示


package schema


import (

    "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


查看完整回答
反对 回复 2022-09-26
  • 1 回答
  • 0 关注
  • 73 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信