Tweaking database queries and responses with life cycle hooks
A model is a representation of a database entity. An entity in a system has a life cycle: it gets created, updated, deleted, and retrieved. While the routes are the external interface to the outside world, the database is the innermost level of our system. Strapi communicates with the database using models that represent it in a database-agnostic way (that is, it can work with different database types) and using the Query Engine API (strapi.db.query)
.
We briefly mentioned the Query Engine API earlier in this chapter when we came across the Entity Service API and learned that the Entity Service API uses the Query Engine API under the hood to execute database queries. The Query Engine API provides the glue between our models and the actual database entity; it transforms our requests into the final queries to be run against the database and then maps the result back into a model. Sometimes, we want to do something extra...