UNPKG

2.28 kBMarkdownView Raw
1# 模型管理
2
3## 概述
4
5gamecloud 的模型管理为数据库表提供了一种面向对象的管理范式,这种范式是在 ORM 层面上进一步封装而成的
6所有的用户自定义模型位于 app/model 目录下,分为 table 和 entity,其中 table 直接映射数据库表,entity映射orm对象
7
8## 建立 orm 模型
9
10下面以新增 test 表为例,描述建立 orm 模型的详细步骤
11
121. 新增 db-migrate 迁移文件
1320191111062616-create-test.js
14
152. 执行 db-migrage 计划,自动生成 test 表结构
16```bash
17npm run commit
18```
19
203. 新增表映射文件
21app/model/table/test.js
22
234. 新增ORM映射文件
24app/model/entity/testEntity.js
25
26**注意要为新增实体设立一个唯一编号,本案中为 101**
27```js
28 static get mapParams(){
29 return {
30 model: Test, //对应数据库表的映射类
31 entity: this, //ORM映射类,在表映射类上做了多种业务封装
32 etype: 101, //实体类型
33 group: 'item', //(可选)对记录进行分组的键名称
34 };
35 }
36```
37
385. 将新增表加入自动加载列表中
39```js
40facade.boot({
41 env: env,
42 loading: [
43 101, //指示加载 test 表
44 ],
45});
46```
47
48## CURD
49
50```js
51let entityType = 101;
52lit id = 1;
53
54//创建新的条目
55let record = await facade.current.GetMapping(entityType).Create();
56
57//根据id查找表中记录
58record = facade.current.GetObject(entityType, id);
59
60//修改记录中指定字段,底层机制会确保自动保存至数据库
61record.setAttr('item', Math.random().toString());
62
63//删除指定记录
64let db = true; // 表示同时从数据库删除
65facade.current.GetMapping(entityType).Delete(id, db);
66
67//分页列表
68let page = 1;
69let result = facade.current.GetMapping(entityType) //得到 Mapping 对象
70 .groupOf() //将 Mapping 转化为 Collection,如果 Mapping 支持分组,可以带分组参数调用
71 .orderby('id', 'desc') //根据id字段倒叙排列
72 .paginate(5, page, ['id', 'item']); //每页5条,显示第1页,只选取'id'和'item'字段
73```