1 | # 模型管理
|
2 |
|
3 | ## 概述
|
4 |
|
5 | gamecloud 的模型管理为数据库表提供了一种面向对象的管理范式,这种范式是在 ORM 层面上进一步封装而成的
|
6 | 所有的用户自定义模型位于 app/model 目录下,分为 table 和 entity,其中 table 直接映射数据库表,entity映射orm对象
|
7 |
|
8 | ## 建立 orm 模型
|
9 |
|
10 | 下面以新增 test 表为例,描述建立 orm 模型的详细步骤
|
11 |
|
12 | 1. 新增 db-migrate 迁移文件
|
13 | 20191111062616-create-test.js
|
14 |
|
15 | 2. 执行 db-migrage 计划,自动生成 test 表结构
|
16 | ```bash
|
17 | npm run commit
|
18 | ```
|
19 |
|
20 | 3. 新增表映射文件
|
21 | app/model/table/test.js
|
22 |
|
23 | 4. 新增ORM映射文件
|
24 | app/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 |
|
38 | 5. 将新增表加入自动加载列表中
|
39 | ```js
|
40 | facade.boot({
|
41 | env: env,
|
42 | loading: [
|
43 | 101, //指示加载 test 表
|
44 | ],
|
45 | });
|
46 | ```
|
47 |
|
48 | ## CURD
|
49 |
|
50 | ```js
|
51 | let entityType = 101;
|
52 | lit id = 1;
|
53 |
|
54 | //创建新的条目
|
55 | let record = await facade.current.GetMapping(entityType).Create();
|
56 |
|
57 | //根据id查找表中记录
|
58 | record = facade.current.GetObject(entityType, id);
|
59 |
|
60 | //修改记录中指定字段,底层机制会确保自动保存至数据库
|
61 | record.setAttr('item', Math.random().toString());
|
62 |
|
63 | //删除指定记录
|
64 | let db = true; // 表示同时从数据库删除
|
65 | facade.current.GetMapping(entityType).Delete(id, db);
|
66 |
|
67 | //分页列表
|
68 | let page = 1;
|
69 | let 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 | ```
|