Query Engine API
Strapi provides a Query Engine API to interact with the database layer at a lower level. It should mostly be used by plugin developers and developers adding custom business logic to their applications. In most use cases, it's recommended to use the Entity Service API instead.
🤓 Entity Service API vs. Query Engine API
Strapi v4 offers several layers to interact with the backend and build your queries:
- The Entity Service API is the recommended API to interact with your application's database. The Entity Service is the layer that handles Strapi's complex data structures like components and dynamic zones, which the lower-level layers are not aware of.
- The Query Engine API interacts with the database layer at a lower level and is used under the hood to execute database queries. It gives unrestricted internal access to the database layer, but should be used only if the Entity Service API does not cover your use case.
- If you need direct access to
knex
functions, usestrapi.db.connection
.
Basic usage
The Query Engine is available through strapi.db.query
:
strapi.db.query('api::blog.article').findMany({ // uid syntax: 'api::api-name.content-type-name'
where: {
title: {
$startsWith: '2021',
$endsWith: 'v4',
},
},
populate: {
category: true,
},
});
Available operations
The Query Engine allows operations on database entries, such as:
- CRUD operations on single entries or multiple entries
- filtering entries, populating relations and ordering and paginating queries results