我无法使用Sequelize查询多对多关联,我推测这与较低/大写问题有关。
我的别名和列名是 camelCase (extraId
),但是生成的查询似乎尝试使用 TitleCased (ExtraId
),但这从下面的错误消息中推断出来。
我想查询所有Products
及其关联的Extras
列表,然后尝试执行以下操作:
const data = await models.Product.findAll(
{
include: [{
model: models.Extra,
as: 'extras'
}]
}
);
但是,这给了我以下错误:
column extras->ProductExtras.ExtraId does not exist
我有三个表Products
,Extras
及其关联表ProductExtras
定义如下:
const Product = sequelize.define('Product', {
name: {
allowNull: false,
type: DataTypes.STRING
}
}, {});
Product.associate = function(models) {
Product.belongsToMany(models.Extra, {
as: 'extras',
through: 'ProductExtras'
});
};
const Extra = sequelize.define('Extra', {
code: DataTypes.INTEGER,
desc: DataTypes.STRING
}, {});
Extra.associate = function(models) {
Extra.belongsToMany(models.Product, {
as: 'products',
through: 'ProductExtras'
})
};
const ProductExtras = sequelize.define('ProductExtras', {
productId: DataTypes.INTEGER,
extraId: DataTypes.INTEGER
}, {});
ProductExtras.associate = function(models) {
ProductExtras.belongsTo(models.Product, {foreignKey: 'productId'});
ProductExtras.belongsTo(models.Extra, {foreignKey: 'extraId'})
};
对于此问题的任何见解或解决方案,将不胜感激。
答案 0 :(得分:0)
您是否尝试过将外键添加到belongsToMany,如下所示?这就是我用来覆盖联接表的默认列名称的方法。
Product.associate = function(models) {
Product.belongsToMany(models.Extra,
{
as: 'extras',
through: 'ProductExtras',
foreignKey : 'extraId'
}
);