Вот сделка - у меня есть 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
},
}]
})
Но тут возникает другая проблема - я не знаю, как сейчассамостоятельно выбирать функции объектов с их полями (идентификатор, имя, изображение значков) без создания другого запроса только для элементов.