Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Como fariamos muitos filtros sem montar queries estranha como comparar uma propriedade = a null sem querer

Eu trabalho com java e quando eu tive que fazer muitos filtros eu tive que fazer um esquema com criteria builder pegava todos os filtros como opcional ia jogando no criteria e no final dava um and q ele juntava todos os filtros como and sem eu ter que ficar fazendo manualmente essas combinações, como faríamos isso no sequelize pq se tivessos 5 filtros independentes mas que precisam ser combinados , existe a chance de mandar um propriedade x = null sem querer e a query n funcionar como esperado.

1 resposta
solução!

Olá Kaique, tudo bem com você? Espero que sim!

Peço desculpa pela demora em responder o seu tópico.

No Sequelize, é possível utilizar o método Op.and para combinar vários filtros de forma dinâmica e sem a necessidade de montar manualmente as combinações.

Por exemplo, suponha que você tenha 5 filtros independentes que precisam ser combinados: filtro1, filtro2, filtro3, filtro4 e filtro5. Para combiná-los com o operador AND, você pode fazer o seguinte:

const { Op } = require('sequelize');

const filtros = {};

if (filtro1) {
  filtros.filtro1 = filtro1;
}

if (filtro2) {
  filtros.filtro2 = filtro2;
}

if (filtro3) {
  filtros.filtro3 = filtro3;
}

if (filtro4) {
  filtros.filtro4 = filtro4;
}

if (filtro5) {
  filtros.filtro5 = filtro5;
}

const resultado = await Modelo.findAll({
  where: {
    [Op.and]: filtros
  }
});

Nesse exemplo, os filtros são adicionados dinamicamente ao objeto filtros apenas se eles estiverem definidos. Em seguida, o operador AND é aplicado ao objeto filtros utilizando a constante Op.and do Sequelize.

Dessa forma, você pode combinar vários filtros de forma dinâmica e sem a necessidade de montar manualmente as combinações. Além disso, é possível evitar a possibilidade de enviar uma propriedade como null sem querer, já que apenas os filtros definidos serão adicionados ao objeto filtros.

Espero ter ajudado. Caso tenha mais perguntas, estarei a disposição para ajudá-lo.

No mais, grande abraço e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software