gamecloud
Version:
game logic server over cloud
74 lines (56 loc) • 2.28 kB
Markdown
gamecloud 的模型管理为数据库表提供了一种面向对象的管理范式,这种范式是在 ORM 层面上进一步封装而成的
所有的用户自定义模型位于 app/model 目录下,分为 table 和 entity,其中 table 直接映射数据库表,entity映射orm对象
下面以新增 test 表为例,描述建立 orm 模型的详细步骤
1. 新增 db-migrate 迁移文件
20191111062616-create-test.js
2. 执行 db-migrage 计划,自动生成 test 表结构
```bash
npm run commit
```
3. 新增表映射文件
app/model/table/test.js
4. 新增ORM映射文件
app/model/entity/testEntity.js
**注意要为新增实体设立一个唯一编号,本案中为 101**
```js
static get mapParams(){
return {
model: Test, //对应数据库表的映射类
entity: this, //ORM映射类,在表映射类上做了多种业务封装
etype: 101, //实体类型
group: 'item', //(可选)对记录进行分组的键名称
};
}
```
5. 将新增表加入自动加载列表中
```js
facade.boot({
env: env,
loading: [
101, //指示加载 test 表
],
});
```
```js
let entityType = 101;
lit id = 1;
//创建新的条目
let record = await facade.current.GetMapping(entityType).Create();
//根据id查找表中记录
record = facade.current.GetObject(entityType, id);
//修改记录中指定字段,底层机制会确保自动保存至数据库
record.setAttr('item', Math.random().toString());
//删除指定记录
let db = true; // 表示同时从数据库删除
facade.current.GetMapping(entityType).Delete(id, db);
//分页列表
let page = 1;
let result = facade.current.GetMapping(entityType) //得到 Mapping 对象
.groupOf() //将 Mapping 转化为 Collection,如果 Mapping 支持分组,可以带分组参数调用
.orderby('id', 'desc') //根据id字段倒叙排列
.paginate(5, page, ['id', 'item']); //每页5条,显示第1页,只选取'id'和'item'字段
```