这是交易-我有3个模型:
房屋,房屋功能和特色。房屋具有多个功能。功能属于许多房屋。 HouseFeature是它们之间的合并表。
我需要要素是常量,房屋需要链接到它们所具有的要素。我需要能够:
1.获取具有所有已连接功能的房屋(功能具有ID,名称和图标图像字段)。
2.根据房屋的功能对其进行过滤。
这是我尝试过的。我的第一次尝试就是将它们与通常的多对多关联联系起来:
House.belongsToMany(models.Feature, {through: models.HouseFeature });
Feature.belongsToMany(models.House, {through: models.HouseFeature });
但是这里的问题是当我创建新的房屋,然后为该特定房屋创建要素时,在我创建的每个要素的要素表中都会创建新的要素行。但是我需要Features为常量,而Houses必须具有与其所具有功能的链接。 在按功能筛选房屋时可能会遇到一些麻烦,但我当时并没有对此进行过多研究。
我的第二个尝试是将House与仅一个HouseFeature相关联,该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
},
}]
})
但是这里出现了另一个问题-我现在不知道如何在不创建仅针对要素的查询的情况下,使用其字段(id,名称,图标图像)获取房屋的要素本身。