我有两个相关的模型,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'} } } })