Skip to content

模型元数据管理

本文档介绍了 Yao 框架中模型元数据的管理方法。模型元数据管理分为两个主要部分:单个模型实例的操作和全局模型管理。

1. 模型实例管理

每个模型实例都提供了一系列操作方法,通过 models.MODEL_ID 进行访问,其中 MODEL_ID 为模型的唯一标识符。

1.1 模型实例基本操作

models.MODEL_ID.migrate

功能描述:将模型配置同步到数据库(创建或更新表结构)

参数说明

参数类型说明必填默认值
forceboolean是否强制删除表数据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

功能描述:从文件或源代码加载模型配置

参数说明

参数类型说明必填默认值
filestring文件名-
sourcestring源代码(如果提供,优先加载源代码)-

返回值

  • 类型: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

功能描述:列出所有模型的信息

参数说明

参数类型说明必填默认值
metadataboolean是否返回模型完整元信息,包含用户在模型中定义的所有信息false
columnsboolean是否返回列信息字典,包括列名、类型、注释等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

功能描述:获取指定模型的元数据信息

参数说明

参数类型说明必填默认值
modelIDstring模型ID-
optionsobject可选参数{}

options 参数说明

参数类型说明默认值
metadataboolean是否返回模型完整元信息false
columnsboolean是否返回列信息字典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

功能描述:检查指定模型是否存在

参数说明

参数类型说明必填默认值
modelIDstring模型ID-

返回值

  • 类型:boolean
  • 说明:true 表示存在,false 表示不存在

示例代码

js
// 检查模型是否存在
const exists = Process('model.exists', 'pet');
if (exists) {
  console.log('宠物模型已存在');
} else {
  console.log('宠物模型不存在');
}

model.reload

功能描述:重新从本地文件加载模型

参数说明

参数类型说明必填默认值
modelIDstring模型ID-

返回值

  • 类型:null 或 Error
  • 说明:成功返回 null,失败返回错误对象

示例代码

js
// 重新加载模型
Process('model.reload', 'pet');
console.log('宠物模型已重新加载');

model.migrate

功能描述:迁移指定模型

参数说明

参数类型说明必填默认值
modelIDstring模型ID-
forceboolean是否强制删除表数据false

返回值

  • 类型:object
  • 说明:迁移结果对象

示例代码

js
// 基本迁移
Process('model.migrate', 'pet');

// 强制重置迁移
Process('model.migrate', 'pet', true);

model.load

功能描述:从文件或源代码加载模型

参数说明

参数类型说明必填默认值
modelIDstring模型ID-
sourcestring模型配置-

返回值

  • 类型: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

功能描述:从内存中卸载模型

参数说明

参数类型说明必填默认值
modelIDstring模型ID-

返回值

  • 类型:null 或 Error
  • 说明:成功返回 null,失败返回错误对象

示例代码

js
// 卸载模型
Process('model.unload', 'pet');
console.log('宠物模型已卸载');