在 yao 中,如何定义一个业务模型
在 Yao 中,定义一个业务模型涉及以下几个关键部分:
模型元数据 (
ModelDSL
)- 包括模型的基本信息,如模型名称、描述、数据表选项等。
- 例如,模型名称 (
name
)、数据表定义 (table
) 等。
字段定义 (
columns
)- 这些是模型中的具体字段,每个字段包含类型、长度、是否可为空、默认值、校验规则等。
- 字段类型可以是
string
,integer
,float
,enum
,json
等。
索引定义 (
indexes
)- 定义数据表中的索引,提高查询效率。
映射关系定义 (
relations
)- 定义模型与其他模型之间的关系,如
hasOne
,hasMany
,hasOneThrough
等。
- 定义模型与其他模型之间的关系,如
默认数据 (
values
)- 定义模型的默认数据记录。
配置选项 (
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
}
}
这个定义包括了模型的名称、数据表信息、字段定义(包括类型、验证规则等)、默认数据以及配置选项。