CRUD operations
The Entity Service API is built on top of the the Query Engine API and uses it to perform CRUD operations on entities.
The uid
parameter used in function calls for this API is a string
built with the following format: [category]::[content-type]
where category
is one of: admin
, plugin
or api
.
Examples:
- A correct
uid
to get users of the Strapi admin panel isadmin::user
. - A possible
uid
for the Upload plugin could beplugin::upload.file
. - As the
uid
s for user-defined custom content-types follow theapi::[content-type]
syntax, if a content-typearticle
exists, it is referenced byapi::article.article
.
Run the strapi content-types:list
command in a terminal to display all possible content-types' uid
s for a specific Strapi instance.
:::
findOne()​
Finds the first entry matching the parameters.
Syntax: findOne(uid: string, id: ID, parameters: Params)
⇒ Entry
Parameters​
Parameter | Description | Type |
---|---|---|
fields | Attributes to return | String[] |
populate | Relations, components and dynamic zones to populate | PopulateParameter |
Example​
const entry = await strapi.entityService.findOne('api::article.article', 1, {
fields: ['title', 'description'],
populate: { category: true },
});
findMany()​
Finds entries matching the parameters.
Syntax: findMany(uid: string, parameters: Params)
⇒ Entry[]
Parameters​
Parameter | Description | Type |
---|---|---|
fields | Attributes to return | String[] |
filters | Filters to use | FiltersParameters |
start | Number of entries to skip (see pagination) | Number |
limit | Number of entries to return (see pagination) | Number |
sort | Order definition | OrderByParameter |
populate | Relations, components and dynamic zones to populate | PopulateParameter |
publicationState | Publication state, can be:
| PublicationStateParameter |
For single types, "findMany" returns the entry data as an object instead of an array of entries.
Example​
const entries = await strapi.entityService.findMany('api::article.article', {
fields: ['title', 'description'],
filters: { title: 'Hello World' },
sort: { createdAt: 'DESC' },
populate: { category: true },
});
To retrieve only draft entries, combine the preview
publication state and the publishedAt
fields:
const entries = await strapi.entityService.findMany('api::article.article', {
publicationState: 'preview',
filters: {
publishedAt: {
$null: true,
},
},
});
:::
## create()
Creates one entry and returns it
Syntax: `create(uid: string, parameters: Params)` ⇒ `Entry`
### Parameters
| Parameter | Description | Type |
| ---------- | ----------- | ---------- |
| `fields` | Attributes to return | `String[]` |
| `populate` | Relations, components and dynamic zones to [populate](/dev-docs/api/entity-service/populate) | [`PopulateParameter`](/dev-docs/api/entity-service/populate) |
| `data` | Input data | `Object` |
### Example
```js
const entry = await strapi.entityService.create('api::article.article', {
data: {
title: 'My Article',
},
});
update()​
Updates one entry and returns it.
update()
only performs a partial update, so existing fields that are not included won't be replaced.
Syntax: update(uid: string, id: ID, parameters: Params)
⇒ Entry
Parameters​
Parameter | Description | Type |
---|---|---|
fields | Attributes to return | String[] |
populate | Relations, components and dynamic zones to populate | PopulateParameter |
data | Input data | object |
Example​
const entry = await strapi.entityService.update('api::article.article', 1, {
data: {
title: 'xxx',
},
});
delete()​
Deletes one entry and returns it.
Syntax: delete(uid: string, id: ID, parameters: Params)
⇒ Entry
Parameters​
Parameter | Description | Type |
---|---|---|
fields | Attributes to return | String[] |
populate | Relations, components and dynamic zones to populate | PopulateParameter |
Example​
const entry = await strapi.entityService.delete('api::article.article', 1);