我正在使用Sequelize来提出这个请求:
return Expense.findAll({ include: [{ model: ExpenseCategory }],}) .then(expenses => res.status(200).send(expenses)) .catch(error => res.status(500).send({ error: error }));
我收到这个错误:
SequelizeEagerLoadingError
我似乎无法找到我的错误.
这是我对三个模型(User,Expense,ExpenseCategory)的迁移:
queryInterface.createTable('Users',{ id: { allowNull: false,autoIncrement: true,primaryKey: true,type: Sequelize.INTEGER },email: { allowNull: false,type: Sequelize.STRING,unique: true },passhash: { allowNull: false,type: Sequelize.STRING },currency: { type: Sequelize.STRING,defualt: 'lev' },createdAt: { allowNull: false,type: Sequelize.DATE },updatedAt: { allowNull: false,type: Sequelize.DATE } }); queryInterface.createTable('Expenses',value: { allowNull: false,type: Sequelize.FLOAT },text: { type: Sequelize.STRING },expenseCategoryId: { allowNull: false,type: Sequelize.INTEGER,references: { model: 'ExpenseCategories',key: 'id' },onDelete: 'cascade' },userId: { allowNull: false,references: { model: 'Users',type: Sequelize.DATE } }); queryInterface.createTable('ExpenseCategories',{ id: { allowNull: false,type: Sequelize.INTEGER },category: { allowNull: false,type: Sequelize.STRING },createdAt: { allowNull: false,type: Sequelize.DATE },updatedAt: { allowNull: false,type: Sequelize.DATE } });
和模型定义:
const User = sequelize.define('User',{ id: { allowNull: false,type: DataTypes.INTEGER },email: { allowNull: false,type: DataTypes.STRING,unique: true },passhash: { allowNull: false,type: DataTypes.STRING },currency: { type: DataTypes.STRING,defaultValue: 'lev' } },{ classMethods: { associate: function (models) { User.hasMany(models.Income,{ foreignKey: 'userId',}); User.hasMany(models.Expense,}); } } }); const Expense = sequelize.define('Expense',value: { allowNull: false,type: DataTypes.FLOAT },text: { type: DataTypes.STRING },expenseCategoryId: { allowNull: false,userId: { allowNull: false,type: DataTypes.INTEGER } },{ classMethods: { associate: function (models) { Expense.belongsTo(models.User,{ foreignKey: 'userId' }); Expense.belongsTo(models.ExpenseCateogory,{ foreignKey: 'expenseCateogoryId',}); } } }); const ExpenseCategory = sequelize.define('ExpenseCategory',category: { allowNull: false,type: DataTypes.STRING } },{ classMethods: { associate: function (models) { ExpenseCateogory.hasMany(models.Expense,{ foreignKey: 'expenseCategoryId' }); } } });
解决方法
只需更改此部分
classMethods: { associate: function (models) { ExpenseCateogory.hasMany(models.Expense,{ foreignKey: 'expenseCategoryId' }); } }
至
ExpenseCategory.associate = (models) => { ExpenseCategory.hasMany(models.style,{ as:'expensecategories' }); }
所以模型完全将遵循这个结构和其他模型
const ExpenseCategory = sequelize.define('ExpenseCategory',{ id: { allowNull: false,category: { allowNull: false,type: DataTypes.STRING } }); ExpenseCategory.associate = (models) => { ExpenseCategory.hasMany(models.style,{ as:'expensecategories' }); } return ExpenseCategory;
这是参考这个youtube视频https://www.youtube.com/watch?v=SaVxJrTRkrI和这个例子来自github的关于模型https://github.com/sequelize/express-example/tree/master/models的关联的续集示例
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。