Update collections-fields.md
This commit is contained in:
parent
485ff4a6b0
commit
25246dec8c
@ -6,7 +6,7 @@
|
||||
|
||||
### Collection
|
||||
|
||||
Collection 是所有同类数据的集合,在 NocoBase 中对应数据库表的概念,如订单、商品、用户、评论等都可以形成 Collection 定义,不同 Collection 通过 name 区分,包含的字段由 `fields` 定义,如:
|
||||
Collection 是所有同类数据的集合,在 NocoBase 中对应数据库表的概念,如订单、商品、用户、评论等都可以形成 Collection 定义。不同 Collection 通过 name 区分,包含的字段由 `fields` 定义,如:
|
||||
|
||||
```ts
|
||||
db.collection({
|
||||
@ -72,7 +72,7 @@ export default {
|
||||
};
|
||||
```
|
||||
|
||||
可以看到,NocoBase 的数据库表结构定义可以直接使用标准的 JSON 格式,其中 `name` 和 `fields` 都是必填项,代表数据表名和该表中的字段定义。字段定义中与 Sequelize 类似会默认创建主键(`id`)、数据创建时间(`createdAt`)和数据更新时间(`updatedAt`)等系统字段,如有特殊需要可以以同名的配置覆盖定义。
|
||||
可以看到,NocoBase 的数据表结构定义可以直接使用标准的 JSON 格式,其中 `name` 和 `fields` 都是必填项,代表数据表名和该表中的字段定义。字段定义中与 Sequelize 类似会默认创建主键(`id`)、数据创建时间(`createdAt`)和数据更新时间(`updatedAt`)等系统字段,如有特殊需要可以以同名的配置覆盖定义。
|
||||
|
||||
该文件定义的数据表我们可以在插件主类的 `load()` 周期中使用 `db.import()` 引入并完成定义。如下所示:
|
||||
|
||||
@ -93,7 +93,7 @@ export default class ShopPlugin extends Plugin {
|
||||
}
|
||||
```
|
||||
|
||||
同时我们为了方便测试,先暂时允许针对这几张表数据资源的所有访问权限,后面我们会在 [权限管理](/development/guide/acl) 中详细介绍如何管理资源的权限。
|
||||
同时我们为了方便测试,先暂时允许针对这几张表里的数据资源的所有访问权限,后面我们会在 [权限管理](/development/guide/acl) 中详细介绍如何管理资源的权限。
|
||||
|
||||
这样在插件被主应用加载时,我们定义的 `products` 表也就被加载到数据库管理实例的内存中了。同时,基于 NocoBase 约定式的数据表资源映射,在应用的服务启动以后,会自动生成对应的 CRUD HTTP API。
|
||||
|
||||
@ -107,7 +107,7 @@ export default class ShopPlugin extends Plugin {
|
||||
|
||||
### 定义关系表和关联字段
|
||||
|
||||
在上面的例子中,我们只定义了一个商品数据表,但是实际上一个商品还需要关联到一个分类,一个品牌,一个供应商等等。这些关联关系可以通过定义关系表来实现,比如我们可以定义一个 `categories` 表,用来关联商品和分类,然后在商品表中添加一个 `category` 字段来关联到分类表。
|
||||
在上面的例子中,我们只定义了一个商品数据表,但是实际上一个商品还需要关联到一个分类,一个品牌,一个供应商等等。这些关联关系可以通过定义关系表来实现,比如我们可以定义一个 `categories` 表,用来存储商品的分类,然后在商品表中添加一个 `category` 字段来关联到分类表。
|
||||
|
||||
新增文件 `collections/categories.ts`,并填入内容:
|
||||
|
||||
@ -202,7 +202,7 @@ export default {
|
||||
}
|
||||
```
|
||||
|
||||
为了简化,订单表中与商品的关联我们只简单的定义为多对一关系,而在实际业务中可能会用到多对多或快照等复杂的建模方式。可以看到,一个订单除了对应某个商品,我们还增加了一个对应用户的关系定义,用户是 NocoBase 内置插件管理的数据表(详细参考[用户插件的代码](https://github.com/nocobase/nocobase/tree/main/packages/plugins/users)),如果我们希望针对已存在的用户表扩展定义“一个用户所拥有的多个订单”的关系,可以在当前的 shop-modeling 插件内继续新增一个数据表文件 `collections/users.ts`,与直接导出 JSON 数据表配置不同的是,这里使用 `@nocobase/database` 包的 `extend()` 方法,进行对已有数据表的扩展定义:
|
||||
为了简化,订单表与商品的关联我们只简单的定义为多对一关系,而在实际业务中可能会用到多对多或快照等复杂的建模方式。可以看到,一个订单除了对应某个商品,我们还增加了一个对应用户的关系定义,用户是 NocoBase 内置插件管理的数据表(详细参考[用户插件的代码](https://github.com/nocobase/nocobase/tree/main/packages/plugins/users))。如果我们希望针对已存在的用户表扩展定义“一个用户所拥有的多个订单”的关系,可以在当前的 shop-modeling 插件内继续新增一个数据表文件 `collections/users.ts`,与直接导出 JSON 数据表配置不同的是,这里使用 `@nocobase/database` 包的 `extend()` 方法,进行对已有数据表的扩展定义:
|
||||
|
||||
```ts
|
||||
import { extend } from '@nocobase/database';
|
||||
@ -220,11 +220,11 @@ export extend({
|
||||
|
||||
这样,原先已存在的用户表也就拥有了一个 `orders` 关联字段,我们可以通过 `GET /api/users/<userId>/orders:list` 来获取指定用户的所有订单数据。
|
||||
|
||||
这个方法在扩展其他已有插件已定义的数据表时非常有用,使得其他已有插件不会反向依赖新的插件,仅形成单向依赖关系,方便在扩展层面进行一定程度的解耦。
|
||||
这个方法在扩展其他插件已定义的数据表时非常有用,使得其他已有插件不会反向依赖新的插件,仅形成单向依赖关系,方便在扩展层面进行一定程度的解耦。
|
||||
|
||||
### 扩展字段类型
|
||||
|
||||
我们在定义订单表的时候针对 `id` 字段使用了 `uuid` 类型,这是一个内置的字段类型,有时候我们也会觉得 UUID 看起来太长比较浪费空间,且查询性能不佳,希望用一个更适合的字段类型,比如一个含日期信息等复杂的编号逻辑,或者是 Snowflake 算法,我们就需要扩展一个自定义字段类型。
|
||||
我们在定义订单表的时候针对 `id` 字段使用了 `uuid` 类型,这是一个内置的字段类型。有时候我们也会觉得 UUID 看起来太长比较浪费空间,且查询性能不佳,希望用一个更适合的字段类型,比如一个含日期信息等复杂的编号逻辑,或者是 Snowflake 算法,我们就需要扩展一个自定义字段类型。
|
||||
|
||||
假设我们需要直接应用 Snowflake ID 生成算法,扩展出一个 `snowflake` 字段类型,我们可以创建一个 `fields/snowflake.ts` 文件:
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user