简体   繁体   English

使用关联对 n:m 相关对象进行序列化错误

[英]Sequelize error using association on n:m related objects

I am using nodeJS, express (4.17.1), sequelize (5.21.4) and mysql (mysql2 v2.1.0) for a current project.我正在为当前项目使用 nodeJS、express (4.17.1)、sequelize (5.21.4) 和 mysql (mysql2 v2.1.0)。

In my database I have three tables Filter, Element and FilterElement.在我的数据库中,我有三个表 Filter、Element 和 FilterElement。 If I query data from database from Filter or Element table separatly I get the result of objects with data.如果我分别从过滤器或元素表中查询数据库中的数据,我会得到带有数据的对象的结果。 If I want to use "connecting" table FilterElement I get this error {"name":"SequelizeEagerLoadingError"}如果我想使用“连接”表 FilterElement,我会收到此错误{"name":"SequelizeEagerLoadingError"}

EagerLoadingError [SequelizeEagerLoadingError]: filter_element is not associated to filters_new! EagerLoadingError [SequelizeEagerLoadingError]:filter_element 与 filters_new 无关!

What is wrong with my code?我的代码有什么问题? These are my sequelize objects codes.这些是我的续集对象代码。

Filter.js过滤器.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;

Element.js元素.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过滤器元素.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;

If I call this function, I do get the desired result of data from database.如果我调用这个函数,我确实从数据库中获得了所需的数据结果。

 listFiltersOnly(req, res) { return filter.findAll() .then((filters) => { res.status(200).send(filters); }) .catch(err => { console.log(err); res.status(400).send(err); }); }

then if I call function list I get the error mentioned up EagerLoadingError然后如果我调用函数列表,我会收到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); }); }

Looking for some suggjestions where might be the problem?寻找一些建议可能是哪里出了问题?

@RatulSharker I removed the asociation from the model and added it where the models are implemented in the controller and now I do get some results. @RatulSharker 我从模型中删除了关联,并将其添加到控制器中实现模型的位置,现在我确实得到了一些结果。

 Filter.belongsToMany(FilterElement, { through: FilterFilterElement, foreignKey: 'FilterHousingModel' }); FilterElement.belongsToMany(Filter, { through: FilterFilterElement, foreignKey: 'FilterElementId' });

Thank you @Ratul Sharker谢谢@Ratul Sharker

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM