Есть ли способ добавить параметры к запросу с помощью typescript и sequelize?

#typescript #search #sequelize.js #backend

#typescript #Поиск #sequelize.js #серверная часть

Вопрос:

Привет, я пытаюсь создать функцию поиска и фильтрации для базы данных, в которой пользователь может включать фильтры и искать определенные записи. Я использую typescript и sequelize.

Я хотел бы вернуть список элементов, к которым применяются фильтры и применяется условие поиска. Я хочу, чтобы мой код делал что-то вроде этого:

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

if(searchParameters.name){
    options  = { [Op.like]: { itemName: '%'   searchParameters.name   '%'}}
}

return Item.findAll({
    where: options
}
  

Я пытаюсь применять только те фильтры, которые фактически предоставил пользователь, и отклонять, если фильтр равен нулю, но я не могу найти способ заставить его работать.

Ответ №1:

В конечном итоге вы пытаетесь создать объект JSON для параметров, который содержит where свойство. Для этого вы можете добавить критерии к параметрам на основе любых критериев, которые вы хотели бы. В вашем примере указан неправильный формат where аргументов, вы хотите получить что-то вроде этого:

 const options = {
  where: {
    itemName: {
      [Op.like]: `%${searchParameters.name}%',
    },
  },
};
  

Чтобы попасть туда условно, было бы похоже на следующее:

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

// ... code

const where = {};

if (searchParameters.name){
  where.itemName = {
    [Op.like]: `%${searchParameters.name}%`,
  }
}

const items = await Item.findAll({ where });