如何使用ORM Sequelize定义模型之一为常数的多对多关系?

时间:2019-04-19 08:56:24

标签: node.js postgresql express sequelize.js associations

这是交易-我有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,名称,图标图像)获取房屋的要素本身。

0 个答案:

没有答案