javascript – Sequelize:Include.where按’父’模型属性过滤

前端之家收集整理的这篇文章主要介绍了javascript – Sequelize:Include.where按’父’模型属性过滤前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有两个相关的模型,Catalog和ProductCategory.后者有一个组合PK,’id,language_id’.
以下是简化的模型:
var Catalog = sequelize.define("Catalog",{
id: {
  type: DataTypes.INTEGER,primaryKey: true,autoIncrement: true
},user_id: {
  type: DataTypes.INTEGER,allowNull: false
},product_category_id: {
  type: DataTypes.STRING(7)
},language_id: {
  type: DataTypes.INTEGER
},... more stuff ...
}

var ProductCategory = sequelize.define("ProductCategory",{
id: {
  type: DataTypes.STRING(7),primaryKey: true
},language_id: {
  type: DataTypes.INTEGER,... more stuff ...
}

Catalog.belongsTo(models.ProductCategory,{foreignKey: 'product_category_id'});

我正在尝试包含与Catalog相关的ProductCategory表中的一些信息,但仅限于language_id匹配时.

目前,我正在从两个表中获得所有可能的匹配.
这是现在的查询

Catalog.find({where:
    {id: itemId},include: {
        model: models.ProductCategory,where: {language_id: /* Catalog.language_id */}
    }
})

有没有办法使用Catalog中的属性来过滤两个模型具有相同语言的包含?

顺便说一下,我也尝试过改变那里没有任何后果:

where: {'ProductCategory.language_id': 'Catalog.language_id'}

解决方法

Sequelize为这种情况提供了额外的运算符$col,因此您不必使用sequelize.literal(‘…’)(这更像是一个黑客攻击).

在您的示例中,用法如下所示:

Catalog.find({where:
    {id: itemId},where: {
          language_id: {$col: 'Catalog.language_id'}
        }
    }
})

猜你在找的JavaScript相关文章