使用实体服务 API 进行 CRUD 操作
页面摘要: 实体服务 API 通过
findOne()、findMany()、create()、update()与delete()方法对内容执行 CRUD 操作,支持过滤、分页、关联(relations)与本地化(localization)。
Entity Service API 在 Strapi v5 中已弃用。请考虑改用 Document Service API。
实体服务 API 构建于 查询引擎 API 之上,并借助其执行针对实体的 CRUD 操作。
此 API 函数调用中使用的 uid 参数为一个 string,其格式为:[category]::[content-type],其中 category 可以是以下之一:admin、plugin 或 api。
示例:
- 获取 Strapi 管理面板(admin panel)用户的
uid示例为admin::user。 - Upload 插件的
uid可能为plugin::upload.file。 - 由于用户自定义的 content-type 的
uid遵循api::[content-type]语法,若存在一个名为article的 content-type,则其引用为api::article.article。
在终端中运行 strapi content-types:list 命令,可显示特定 Strapi 实例所有可能的 content-type 的 uid。
findOne()
查找与参数匹配的第一个条目。
语法:findOne(uid: string, id: ID, parameters: Params) ⇒ Entry
参数
| 参数 | 说明 | 类型 |
|---|---|---|
fields | 需返回的字段(属性) | String[] |
populate | 需 联表加载(populate)的关联、组件与动态区域 | PopulateParameter |
locale | 启用国际化(Internationalization)插件时的区域代码(例如 fr-FR)。将以本地化变体为目标,而非默认区域。 | string |
示例
const entry = await strapi.entityService.findOne('api::article.article', 1, {
fields: ['title', 'description'],
populate: { category: true },
});
findMany()
查找与参数匹配的条目。
语法:findMany(uid: string, parameters: Params) ⇒ Entry[]
参数
| 参数 | 说明 | 类型 |
|---|---|---|
fields | 需返回的字段(属性) | String[] |
filters | 要使用的 过滤器 | FiltersParameters |
start | 需跳过的条目数(参见 分页) | Number |
limit | 需返回的条目数(参见 分页) | Number |
sort | 排序 定义 | OrderByParameter |
populate | 需 联表加载(populate)的关联、组件与动态区域 | PopulateParameter |
publicationState | 发布状态,可为: |
live:仅返回已发布的条目preview:同时返回草稿条目与已发布条目(默认值) |PublicationStateParameter| |locale| 启用国际化(Internationalization)插件时的区域代码。将结果限制为该区域(省略则为默认区域)。 |string|
示例
const entries = await strapi.entityService.findMany('api::article.article', {
fields: ['title', 'description'],
filters: { title: 'Hello World' },
sort: { createdAt: 'DESC' },
populate: { category: true },
});
若只想检索草稿条目,可将 preview 发布状态与 publishedAt 字段结合使用:
const entries = await strapi.entityService.findMany('api::article.article', {
publicationState: 'preview',
filters: {
publishedAt: {
$null: true,
},
},
});
create()
创建一个条目并返回。
语法:create(uid: string, parameters: Params) ⇒ Entry
参数
| 参数 | 说明 | 类型 |
|---|---|---|
fields | 需返回的字段(属性) | String[] |
populate | 需 联表加载(populate)的关联、组件与动态区域 | PopulateParameter |
locale | 启用国际化(Internationalization)插件时的区域代码。将为该区域创建条目。 | string |
data | 输入数据 | Object |
在 data 对象中,可以使用 connect、disconnect 和 set 参数管理关联,语法与 REST API 中描述的一致(参见管理关联)。
示例
const entry = await strapi.entityService.create('api::article.article', {
data: {
title: 'My Article',
},
});
update()
更新一个条目并返回。
update() 仅执行部分更新,因此未被包含在内的已有字段不会被替换。
语法:update(uid: string, id: ID, parameters: Params) ⇒ Entry
在 data 对象中,可以使用 connect、disconnect 和 set 参数管理关联,语法与 REST API 中描述的一致(参见管理关联)。
参数
| 参数 | 说明 | 类型 |
|---|---|---|
fields | 需返回的字段(属性) | String[] |
populate | 需 联表加载(populate)的关联、组件与动态区域 | PopulateParameter |
locale | 启用国际化(Internationalization)插件时的区域代码。将更新匹配的本地化变体。 | string |
data | 输入数据 | object |
示例
const entry = await strapi.entityService.update('api::article.article', 1, {
data: {
title: 'xxx',
},
});
delete()
删除一个条目并返回。
语法:delete(uid: string, id: ID, parameters: Params) ⇒ Entry
参数
| 参数 | 说明 | 类型 |
|---|---|---|
fields | 需返回的字段(属性) | String[] |
populate | 需 联表加载(populate)的关联、组件与动态区域 | PopulateParameter |
locale | 启用国际化(Internationalization)插件时的区域代码。将删除与该区域匹配的本地化变体。 | string |
示例
const entry = await strapi.entityService.delete('api::article.article', 1);