ent-zh_cn
  • ent 中文文档
  • 入门指南
    • 快速入门
  • Schema
    • 介绍
    • 字段
    • 边
    • 索引
    • 配置
    • Mixin
  • 代码生成
    • 介绍
    • 增查改删 API
    • 图遍历
    • 数据聚合
    • 条件查询
    • 分页和排序
    • 事务
  • 迁移
    • 数据库迁移
    • 支持的方言
  • 杂项
    • sql.DB 集成
Powered by GitBook
On this page

Was this helpful?

  1. Schema

Mixin

Mixin 允许你创建可重复使用的 ent.Schema 的代码。

ent.Mixin 接口定义如下:

type Mixin interface {
    Fields() []ent.Field
}

例子

一个 Mixin 的常见用法是,将通用字段与你的模式混合在一起。

// -------------------------------------------------
// Mixin 定义部分

// TimeMixin 需要实现 ent.Mixin 接口。
// 时间字段及其定义。
type TimeMixin struct{}

func (TimeMixin) Fields() []ent.Field {
    return []ent.Field{
        field.Time("created_at").
            Immutable().
            Default(time.Now),
        field.Time("updated_at").
            Default(time.Now).
            UpdateDefault(time.Now),
    }
}

// DetailsMixin 需要实现 ent.Mixin 接口。
// 详情字段及其定义。
type DetailsMixin struct{}

func (DetailsMixin) Fields() []ent.Field {
    return []ent.Field{
        field.Int("age").
            Positive(),
        field.String("name").
            NotEmpty(),
    }
}

// -------------------------------------------------
// Schema 定义部分

// User 混入了 TimeMixin 和 DetailsMixin 字段。
// 因此 User 有 5 个字段: `created_at`, `updated_at`, `age`, `name` and `nickname`.
type User struct {
    ent.Schema
}

func (User) Mixin() []ent.Mixin {
    return []ent.Mixin{
        TimeMixin{},
        DetailsMixin{},
    }
}

func (User) Fields() []ent.Field {
    return []ent.Field{
        field.String("nickname").
            Unique(),
    }
}

// Pet 混入了 DetailsMixin 字段。
// 因此 Pet 有 3 个字段: `age`, `name` and `weight`.
type Pet struct {
    ent.Schema
}

func (Pet) Mixin() []ent.Mixin {
    return []ent.Mixin{
        DetailsMixin{},
    }
}

func (Pet) Fields() []ent.Field {
    return []ent.Field{
        field.Float("weight"),
    }
}
Previous配置Next介绍

Last updated 5 years ago

Was this helpful?