gpt4 book ai didi

go - 在go ent框架中创建基础实体

转载 作者:行者123 更新时间:2023-12-04 14:04:27 27 4
gpt4 key购买 nike

我是 golang 新手,正在使用 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 来做到这一点,所有其他实体都从它继承,但不确定在这种情况下该怎么做。

最佳答案

您可以使用 MixIn,它允许您创建可重用的 ent.Schema 代码片段,这些代码可以使用组合注入(inject)到其他模式中,因此,您可以在另一个模式中定义时间戳值并将其混合在您需要它的其他模式中,这样您的时间戳(基本实体)混合模式将如下所示

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),
}
}

现在,当它被定义时,您需要将这个时间戳模式注入(inject)到您的其他模式中。为此,您需要做的是将其注入(inject)该模式的 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_time 字段添加到架构的内置时间混合,它被定义为 mixin.Time{}

有关更多详细信息,您可以查看 Mixin

关于go - 在go ent框架中创建基础实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68971830/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com