Skip to content
导航栏

在 yao 中,如何定义一个业务模型

在 Yao 中,定义一个业务模型涉及以下几个关键部分:

  1. 模型元数据 (ModelDSL)

    • 包括模型的基本信息,如模型名称、描述、数据表选项等。
    • 例如,模型名称 (name)、数据表定义 (table) 等。
  2. 字段定义 (columns)

    • 这些是模型中的具体字段,每个字段包含类型、长度、是否可为空、默认值、校验规则等。
    • 字段类型可以是 string, integer, float, enum, json 等。
  3. 索引定义 (indexes)

    • 定义数据表中的索引,提高查询效率。
  4. 映射关系定义 (relations)

    • 定义模型与其他模型之间的关系,如 hasOne, hasMany, hasOneThrough 等。
  5. 默认数据 (values)

    • 定义模型的默认数据记录。
  6. 配置选项 (option)

    • 包括是否启用时间戳 (timestamps)、软删除 (soft_deletes) 等配置项。

以一个用户信息模型为例,其定义可能如下:

json
{
  "name": "用户",
  "table": {
    "name": "admin_user",
    "comment": "用户表",
    "engine": "InnoDB"
  },
  "columns": [
    {
      "label": "ID",
      "name": "id",
      "type": "ID"
    },
    {
      "label": "类型",
      "name": "type",
      "type": "enum",
      "option": ["super", "admin", "staff", "user", "robot"],
      "comment": "账号类型 super 超级管理员,admin 管理员, staff 员工, user 用户, robot 机器人",
      "default": "user",
      "validations": [
        {
          "method": "typeof",
          "args": ["string"],
          "message": "{{input}}类型错误, {{label}}应该为字符串"
        },
        {
          "method": "enum",
          "args": ["super", "admin", "staff", "user", "robot"],
          "message": "{{input}}不在许可范围, {{label}}应该为 super/admin/staff/user/robot"
        }
      ]
    }
    // 更多字段...
  ],
  "relations": {},
  "values": [
    {
      "name": "管理员",
      "type": "super",
      "email": "xiang@iqka.com",
      "mobile": null,
      "password": "A123456p+",
      "status": "enabled",
      "extra": {
        "sex": ""
      }
    }
  ],
  "option": {
    "timestamps": true,
    "soft_deletes": true
  }
}

这个定义包括了模型的名称、数据表信息、字段定义(包括类型、验证规则等)、默认数据以及配置选项。