zoukankan      html  css  js  c++  java
  • ent 基本使用六 Mixin

    ent 的Mixin 可以让我们服用已有的schema

    Mixin 接口说明

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

    一个demo

    • 代码
    // -------------------------------------------------
    // Mixin definition
    // TimeMixin implements the ent.Mixin for sharing
    // time fields with package schemas.
    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 implements the ent.Mixin for sharing
    // entity details fields with package schemas.
    type DetailsMixin struct{}
    func (DetailsMixin) Fields() []ent.Field {
        return []ent.Field{
            field.Int("age").
                Positive(),
            field.String("name").
                NotEmpty(),
        }
    }
    // -------------------------------------------------
    // Schema definition
    // User schema mixed-in the TimeMixin and DetailsMixin fields and therefore
    // has 5 fields: `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 schema mixed-in the DetailsMixin fields and therefore
    // has 3 fields: `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"),
        }
    } 
    • 简单说明
      以上代码实现了DetailsMixin 以及TimeMixin 两个Mixin 我们在User 以及Pet中通过添加 Mixin 方法实现了复用

    参考资料

    https://entgo.io/docs/schema-mixin/

  • 相关阅读:
    C# 还原SQL数据库(非存储过程方式)
    C# 无边框窗体移动代码
    SQL 2008 R2 数据库镜像操作
    序列号
    Oracle VM VirtualBox 随系统自动启动虚拟机的方法
    SQL每个用户最后的一条记录
    JS判断是否在微信浏览器打开
    使用device.js检测设备并实现不同设备展示不同网页
    check单选框多个全选与取消全选
    判断滚动是否到达底部
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/11674201.html
Copyright © 2011-2022 走看看