Filtrar datos en Strapi

En los post anteriores ya vimos cómo crear información y cómo activar la API en Strapi, además de obtener información. Sin embargo, algo vital cuando consultamos información es poder filtrar información, paginar y ordenar los datos. Ahora aprenderemos cómo filtrar datos en Strapi.

Ordenar datos en Strapi

Una acción común cuando recuperamos datos de una API es ordenar esta información según qué campos necesitemos.

El ordenamiento se puede combinar con las variantes que ya vimos en el post anterior. En este caso solo vamos a obtener el campo Nombre de nuestro modelo Productos para verlo mejor.

Los posibles valores son asc y desc, por default es asc.

El formato es:

&sort[0]=Nombre:desc
&sort[0]=Nombre:asc
&sort[0]=Nombre:desc&sort[1]=Tipo:asc

Construimos una llamada para probar:

curl -X GET \
--no-progress-meter \
-H "Authorization: bearer 9397b9b201300f9e92a4dcc209a9c86feaf72d96e82f36661bde815edf78c9c5184774befa4e3394d04739a416dc34b2fc1318aa27771b69ee90d51ed1e35e44a08b80388ea8601bfc746a237ea1eb83f8391bc690b44e002c8e846620c86046171913b6033fc52b5490ba3b65a8b1a7905f957d8471799c22049694b0630281" \
http://localhost:1337/api/productos?fields[0]=Nombre&sort[0]=Nombre:desc --globoff | jq .
ordenar datos en Strapi

Acá ya vemos ordenados los datos por el campo Nombre.

Paginar datos

También podemos “paginar” la información mediante el parámetro pagination y sus dos posibles valores:

  • page: página que quiero ver.
  • pageSize: la cantidad de registros que quiero mostrar por página.
curl -X GET \
--no-progress-meter \
-H "Authorization: bearer 9397b9b201300f9e92a4dcc209a9c86feaf72d96e82f36661bde815edf78c9c5184774befa4e3394d04739a416dc34b2fc1318aa27771b69ee90d51ed1e35e44a08b80388ea8601bfc746a237ea1eb83f8391bc690b44e002c8e846620c86046171913b6033fc52b5490ba3b65a8b1a7905f957d8471799c22049694b0630281" \
http://localhost:1337/api/productos?pagination[page]=1&pagination[pageSize]=2 --globoff | jq .
paginar datos en Strapi

Buscar datos en Strapi

Ahora veremos cómo filtrar datos en Strapi.

Acá tenemos una lista de parámetros que podemos usar para buscar información dentro de un modelo:

OperadorDescripción
$eqIgual
$eqiIgual (case-insensitive)
$neDiferente
$neiDiferente (case-insensitive)
$ltMenor que
$lteMenor o igual que
$gtMayor que
$gteMayor o igual que
$inIncluido en un array
$notInNo incluido en un array
$containsContiene
$notContainsNo contiene
$containsiContiene (case-insensitive)
$notContainsiNo contiene (case-insensitive)
$nulles null
$notNullno es null
$betweenEntre
$startsWithComienza con
$startsWithiComienza con (case-insensitive)
$endsWithTermina en
$endsWithiTermine en (case-insensitive)
$orFiltra con la expresión “or”
$andFiltra con la expresión “and”
$notFiltra con la expresión “not”

Vamos a usar $containsi para buscar algún termino ignorando si escribimos mayúsculas o minúsculas:

curl -X GET \
--no-progress-meter \
-H "Authorization: bearer 9397b9b201300f9e92a4dcc209a9c86feaf72d96e82f36661bde815edf78c9c5184774befa4e3394d04739a416dc34b2fc1318aa27771b69ee90d51ed1e35e44a08b80388ea8601bfc746a237ea1eb83f8391bc690b44e002c8e846620c86046171913b6033fc52b5490ba3b65a8b1a7905f957d8471799c22049694b0630281" \
http://localhost:1337/api/productos?filters[Nombre][\$containsi]=xyz --globoff | jq .

NOTA: si nos fijamos, en el ejemplo uso $containsi con el backslash antes de $ porque yo estoy usando la consola y si no lo escapamos, entonces se irá un valor vacío (porque la consola querrá evaludar una variable que no existe) y no funcionará. Si usas Postman o alguno de estos programas, no es necesario anteponer el backslash.

El resultado es el siguiente:

filtrar datos en Strapi

Si queremos filtrar por ID usamos el operador $eq:

curl -X GET \
--no-progress-meter \
-H "Authorization: bearer 9397b9b201300f9e92a4dcc209a9c86feaf72d96e82f36661bde815edf78c9c5184774befa4e3394d04739a416dc34b2fc1318aa27771b69ee90d51ed1e35e44a08b80388ea8601bfc746a237ea1eb83f8391bc690b44e002c8e846620c86046171913b6033fc52b5490ba3b65a8b1a7905f957d8471799c22049694b0630281" \
http://localhost:1337/api/productos?filters[id][\$eq]=3 --globoff | jq .
filtrar datos en Strapi usando operadores

Si queremos obtener más de un registro por ID usamos la misma notación que cuando seleccionamos los campos a mostrar:

?filters[id][\$in][0]=2&filters[id][\$in][1]=4
curl -X GET \
--no-progress-meter \
-H "Authorization: bearer 9397b9b201300f9e92a4dcc209a9c86feaf72d96e82f36661bde815edf78c9c5184774befa4e3394d04739a416dc34b2fc1318aa27771b69ee90d51ed1e35e44a08b80388ea8601bfc746a237ea1eb83f8391bc690b44e002c8e846620c86046171913b6033fc52b5490ba3b65a8b1a7905f957d8471799c22049694b0630281" \
http://localhost:1337/api/productos?filters[id][\$in][0]=2&filters[id][\$in][1]=4 --globoff | jq .

Para mezclar por ejemplo, el ID o el Nombre de un producto, usamos el operador $or:

curl -X GET \
--no-progress-meter \
-H "Authorization: bearer 9397b9b201300f9e92a4dcc209a9c86feaf72d96e82f36661bde815edf78c9c5184774befa4e3394d04739a416dc34b2fc1318aa27771b69ee90d51ed1e35e44a08b80388ea8601bfc746a237ea1eb83f8391bc690b44e002c8e846620c86046171913b6033fc52b5490ba3b65a8b1a7905f957d8471799c22049694b0630281" \
http://localhost:1337/api/productos?filters[\$or][0][Nombre][\$containsi]=mesa&filters[\$or][1][id][\$eq]=1 --globoff | jq .

Igual podemos usar el operador $and:

curl -X GET \
--no-progress-meter \
-H "Authorization: bearer 9397b9b201300f9e92a4dcc209a9c86feaf72d96e82f36661bde815edf78c9c5184774befa4e3394d04739a416dc34b2fc1318aa27771b69ee90d51ed1e35e44a08b80388ea8601bfc746a237ea1eb83f8391bc690b44e002c8e846620c86046171913b6033fc52b5490ba3b65a8b1a7905f957d8471799c22049694b0630281" \
http://localhost:1337/api/productos?filters[\$or][0][Nombre][\$containsi]=mesa&filters[\$and][1][id][\$eq]=4 --globoff | jq .

Filtrar por relaciones en Strapi

Filtrar por relaciones en Strapi permite que podamos buscar los modelos de acuerdo a campos de modelos relacionados, por ejemplo, vamos a obtener los productos cuya categoría contenga la palabra “casa”:

curl -X GET \
--no-progress-meter \
-H "Authorization: bearer 9397b9b201300f9e92a4dcc209a9c86feaf72d96e82f36661bde815edf78c9c5184774befa4e3394d04739a416dc34b2fc1318aa27771b69ee90d51ed1e35e44a08b80388ea8601bfc746a237ea1eb83f8391bc690b44e002c8e846620c86046171913b6033fc52b5490ba3b65a8b1a7905f957d8471799c22049694b0630281" \
http://localhost:1337/api/productos?populate[0]=categorias&filters[categorias][Nombre][\$containsi]=casa --globoff | jq .
filtrar relaciones en Strapi

Aquí vemos el siguiente formato:

?populate[0]=categorias&filters[categorias][Nombre][\$containsi]=casa
  • Queremos mostrar nuestra relación categorias
  • Filtramos el Nombre de las categorias por “casa”

Puedes obtener más info acá.

Esto ha sido todo por este post.

Gracias por leer.


Posted

in

, , , , , ,

by