【发布时间】:2020-05-30 05:30:30
【问题描述】:
我正在为当前项目使用 nodeJS、express (4.17.1)、sequelize (5.21.4) 和 mysql (mysql2 v2.1.0)。
在我的数据库中,我有三个表 Filter、Element 和 FilterElement。如果我分别从过滤器或元素表中查询数据库中的数据,我会得到带有数据的对象的结果。如果我想使用“连接”表 FilterElement 我会收到此错误 {"name":"SequelizeEagerLoadingError"}
EagerLoadingError [SequelizeEagerLoadingError]: filter_element 不是 关联到 filters_new!
我的代码有什么问题? 这些是我的续集对象代码。
过滤器.js
const Sequelize = require('sequelize');
const db = require('../config/database');
const Filter = db.define('filters_new', {
Model:{
type: Sequelize.STRING,
primaryKey: true,
allowNull: false
}
},
{
timestamps: false,
freezeTableName: true
}
);
Filter.associate = function(models) {
Filter.belongsToMany(models.Element, {
through: models.FilterElement,
as: 'filter',
foreignKey: 'FilterHousingModel'
});
};
module.exports = Filter;
元素.js
const Sequelize = require('sequelize');
const db = require('../config/database');
const Element = db.define('filter_element', {
idfilter_element:{
type: Sequelize.INTEGER,
primaryKey: true,
allowNull: false
},
ElementName:{
type: Sequelize.STRING,
}
},
{
timestamps: false,
freezeTableName: true
}
);
Element.associate = function(models) {
Element.belongsToMany(models.Filter, {
through: models.FilterElement,
as: 'element',
foreignKey: 'FilterElementId'
});
};
module.exports = Element;
FilterElemnt.js
const Sequelize = require('sequelize');
const db = require('../config/database');
const FilterElement = db.define('filters_new', {
idfilter_filterelement:{
type: Sequelize.STRING,
primaryKey: true,
allowNull: false,
autoincrement: true
},
FilterHousingModel: {
type: Sequelize.STRING
},
FilterElementId: {
type: Sequelize.INTEGER
}
},
{
timestamps: false,
freezeTableName: true
}
);
module.exports = FilterElement;
如果我调用这个函数,我确实会从数据库中得到想要的数据结果。
listFiltersOnly(req, res) {
return filter.findAll()
.then((filters) => {
res.status(200).send(filters);
})
.catch(err => {
console.log(err);
res.status(400).send(err);
});
}
然后,如果我调用函数列表,我会收到上面提到的错误 EagerLoadingError
list(req, res) {
return filter.findAll({
include: [{
model: element,
as: 'element'
}],
})
.then((filters) => {
console.log(filters);
res.status(200).send(filters);
})
.catch(err => {
console.log(err);
res.status(400).send(err);
});
}
寻找一些可能是哪里问题的建议?
【问题讨论】:
-
我在 sequelize V5 参考中找不到“Model.associate”的任何参考。我所看到和知道的是直接使用诸如“belongsTo”、“hasMany”之类的关联函数。您是否在实现中手动调用 Model.associate ?
标签: javascript mysql node.js sequelize.js