使用实体服务 API 进行 CRUD 操作

页面摘要: 实体服务 API 通过 findOne()、findMany()、create()、update() 与 delete() 方法对内容执行 CRUD 操作,支持过滤、分页、关联(relations)与本地化(localization)。

WARNING

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。
TIP

在终端中运行 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 },
});
TIP

若只想检索草稿条目,可将 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
TIP

在 data 对象中,可以使用 connect、disconnect 和 set 参数管理关联,语法与 REST API 中描述的一致(参见管理关联)。

示例

const entry = await strapi.entityService.create('api::article.article', {
  data: {
    title: 'My Article',
  },
});

update()

更新一个条目并返回。

NOTE

update() 仅执行部分更新,因此未被包含在内的已有字段不会被替换。

语法:update(uid: string, id: ID, parameters: Params) ⇒ Entry

TIP

在 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);