模型元数据管理
本文档介绍了 Yao 框架中模型元数据的管理方法。模型元数据管理分为两个主要部分:单个模型实例的操作和全局模型管理。
1. 模型实例管理
每个模型实例都提供了一系列操作方法,通过 models.MODEL_ID
进行访问,其中 MODEL_ID
为模型的唯一标识符。
1.1 模型实例基本操作
models.MODEL_ID.migrate
功能描述:将模型配置同步到数据库(创建或更新表结构)
参数说明:
参数 | 类型 | 说明 | 必填 | 默认值 |
---|---|---|---|---|
force | boolean | 是否强制删除表数据 | 否 | false |
返回值:
- 类型:object
- 说明:迁移结果对象
示例代码:
js
// 基本用法 - 同步表结构
Process('models.pet.migrate');
// 强制重置表结构和数据
Process('models.pet.migrate', true);
命令行用法:
bash
# 基本用法
yao run models.pet.migrate
# 强制重置
yao run models.pet.migrate true
models.MODEL_ID.load
功能描述:从文件或源代码加载模型配置
参数说明:
参数 | 类型 | 说明 | 必填 | 默认值 |
---|---|---|---|---|
file | string | 文件名 | 是 | - |
source | string | 源代码(如果提供,优先加载源代码) | 否 | - |
返回值:
- 类型:null 或 Error
- 说明:成功返回 null,失败返回错误对象
示例代码:
js
// 从文件加载
Process('models.pet.load', '/models/pet.mod.json');
// 从源代码加载
Process('models.pet.load', '', {
name: '宠物信息',
table: { name: 'pet', comment: '宠物信息表' },
columns: [
{ name: 'id', type: 'ID' },
{ name: 'name', type: 'string', comment: '宠物名称' },
{ name: 'type', type: 'string', comment: '宠物类型' }
]
});
models.MODEL_ID.reload
功能描述:重新加载模型配置
参数:无
返回值:
- 类型:object
- 说明:加载结果对象
示例代码:
js
// 重新加载模型配置
Process('models.pet.reload');
models.MODEL_ID.read
功能描述:读取模型元信息
参数:无
返回值:
- 类型:object
- 说明:模型配置信息对象
示例代码:
js
// 读取模型配置
const modelInfo = Process('models.pet.read');
console.log(modelInfo);
models.MODEL_ID.exists
功能描述:检查模型是否存在
参数:无
返回值:
- 类型:boolean
- 说明:true 表示存在,false 表示不存在
示例代码:
js
// 检查模型是否存在
const exists = Process('models.pet.exists');
if (exists) {
console.log('模型已存在');
} else {
console.log('模型不存在');
}
2. 全局模型管理
2.1 模型列表和查询
model.list
功能描述:列出所有模型的信息
参数说明:
参数 | 类型 | 说明 | 必填 | 默认值 |
---|---|---|---|---|
metadata | boolean | 是否返回模型完整元信息,包含用户在模型中定义的所有信息 | 否 | false |
columns | boolean | 是否返回列信息字典,包括列名、类型、注释等 | 否 | false |
返回值:
- 类型:array
- 说明:模型信息对象数组
返回值示例:
json
[
{
"file": "/models/app/blog/site.mod.yao",
"table": {
"name": "app_blog_site",
"collation": "",
"charset": "",
"primarykeys": null
},
"primary": "id",
"metadata": {
"name": "博客",
"columns": [...],
"relations": {...},
"option": {}
},
"columns": {...},
"id": "app.blog.site",
"name": "博客",
"description": ""
}
]
示例代码:
js
// 基本用法
const models = Process('model.list');
console.log('所有模型列表:', models);
// 获取详细信息
const modelsWithDetails = Process('model.list', {
metadata: true,
columns: true
});
// 处理返回结果
modelsWithDetails.forEach((model) => {
console.log(`模型ID: ${model.id}`);
console.log(`表名: ${model.table.name}`);
if (model.columns) {
console.log('列信息:', model.columns);
}
});
model.get
功能描述:获取指定模型的元数据信息
参数说明:
参数 | 类型 | 说明 | 必填 | 默认值 |
---|---|---|---|---|
modelID | string | 模型ID | 是 | - |
options | object | 可选参数 | 否 | {} |
options 参数说明:
参数 | 类型 | 说明 | 默认值 |
---|---|---|---|
metadata | boolean | 是否返回模型完整元信息 | false |
columns | boolean | 是否返回列信息字典 | false |
返回值:
- 类型:object
- 说明:模型元数据信息对象
示例代码:
js
// 基本用法
const petModel = Process('model.get', 'pet');
console.log('宠物模型信息:', petModel);
// 获取完整信息
const petModelDetails = Process('model.get', 'pet', {
metadata: true,
columns: true
});
// 处理模型信息
if (petModelDetails) {
console.log(`模型名称: ${petModelDetails.name}`);
console.log(`表名: ${petModelDetails.table.name}`);
if (petModelDetails.columns) {
console.log('列信息:');
Object.entries(petModelDetails.columns).forEach(([name, info]) => {
console.log(`- ${name} (${info.type}): ${info.comment}`);
});
}
}
2.2 模型生命周期管理
model.exists
功能描述:检查指定模型是否存在
参数说明:
参数 | 类型 | 说明 | 必填 | 默认值 |
---|---|---|---|---|
modelID | string | 模型ID | 是 | - |
返回值:
- 类型:boolean
- 说明:true 表示存在,false 表示不存在
示例代码:
js
// 检查模型是否存在
const exists = Process('model.exists', 'pet');
if (exists) {
console.log('宠物模型已存在');
} else {
console.log('宠物模型不存在');
}
model.reload
功能描述:重新从本地文件加载模型
参数说明:
参数 | 类型 | 说明 | 必填 | 默认值 |
---|---|---|---|---|
modelID | string | 模型ID | 是 | - |
返回值:
- 类型:null 或 Error
- 说明:成功返回 null,失败返回错误对象
示例代码:
js
// 重新加载模型
Process('model.reload', 'pet');
console.log('宠物模型已重新加载');
model.migrate
功能描述:迁移指定模型
参数说明:
参数 | 类型 | 说明 | 必填 | 默认值 |
---|---|---|---|---|
modelID | string | 模型ID | 是 | - |
force | boolean | 是否强制删除表数据 | 否 | false |
返回值:
- 类型:object
- 说明:迁移结果对象
示例代码:
js
// 基本迁移
Process('model.migrate', 'pet');
// 强制重置迁移
Process('model.migrate', 'pet', true);
model.load
功能描述:从文件或源代码加载模型
参数说明:
参数 | 类型 | 说明 | 必填 | 默认值 |
---|---|---|---|---|
modelID | string | 模型ID | 是 | - |
source | string | 模型配置 | 是 | - |
返回值:
- 类型:null 或 Error
- 说明:成功返回 null,失败返回错误对象
示例代码:
js
// 从源代码加载模型
const modelSource = {
name: '宠物信息',
table: { name: 'pet', comment: '宠物信息表' },
columns: [
{ name: 'id', type: 'ID' },
{ name: 'name', type: 'string', comment: '宠物名称' }
]
};
Process('model.load', 'pet', JSON.stringify(modelSource));
model.unload
功能描述:从内存中卸载模型
参数说明:
参数 | 类型 | 说明 | 必填 | 默认值 |
---|---|---|---|---|
modelID | string | 模型ID | 是 | - |
返回值:
- 类型:null 或 Error
- 说明:成功返回 null,失败返回错误对象
示例代码:
js
// 卸载模型
Process('model.unload', 'pet');
console.log('宠物模型已卸载');