Как определить отношение многие ко многим с одной из моделей, являющихся константами, с использованием ORM Sequelize? - PullRequest
0 голосов
/ 19 апреля 2019

Вот сделка - у меня есть 3 модели:
House, HouseFeature и Feature.Дома имеют несколько особенностей.Особенности принадлежат многим домам.HouseFeature - это таблица слияния между ними.Мне нужны функции, чтобы быть константами, а дома - просто ссылками на те функции, которые у них есть.Мне нужно уметь:
1. Получить дом со всеми подключенными функциями (функции имеют поля идентификатора, имени и значка изображения).
2. Фильтруйте дома в зависимости от имеющихся у них функций.

Это то, что я пробовал.Моя первая попытка состояла в том, чтобы просто связать их с обычными ассоциациями «многие ко многим»:

House.belongsToMany(models.Feature, {through: models.HouseFeature });
Feature.belongsToMany(models.House, {through: models.HouseFeature });

Но проблема здесь заключалась в том, что я создал новый дом, а затем создал элементы для этого конкретного дома в таблице характеристик для каждой функции, которую ясоздать новую строку Feature создана.Но мне нужны функции, чтобы быть константами, а дома - просто ссылками на их функции.И могут быть некоторые проблемы с фильтрацией домов по функциям, но тогда я не особо разбирался в них.

Моя вторая попытка была связать House только с одним HouseFeature, который будет содержать массив Id функций.Это позволило мне фильтровать дома по функциям:

House.hasOne(models.HouseFeature, { onDelete: 'CASCADE' });
HouseFeature.belongsTo(models.House);

const HouseFeature = sequelize.define('HouseFeature', {
    features: {
      type: DataTypes.ARRAY(DataTypes.INTEGER)
    }
  }, {});

И я мог фильтровать дома по таким функциям:

  db.House.findAll({
      include: [{
        model: db.HouseFeature, 
        as: 'HouseFeature',
        where: {
          features: {
            [Op.contains]: req.body.features // array of needed featuresIds
          }                                  // which comes from frontend
        },
      }]     
  })

Но тут возникает другая проблема - я не знаю, как сейчассамостоятельно выбирать функции объектов с их полями (идентификатор, имя, изображение значков) без создания другого запроса только для элементов.

...