postgresql – 包含相关模型时的Sequelize Eager Loading Error
发布时间:2020-12-13 16:09:25 所属栏目:百科 来源:网络整理
导读:我正在使用Sequelize来提出这个请求: return Expense.findAll({ include: [{ model: ExpenseCategory }],}) .then(expenses = res.status(200).send(expenses)) .catch(error = res.status(500).send({ error: error })); 我收到这个错误: SequelizeEagerL
我正在使用Sequelize来提出这个请求:
return Expense.findAll({ include: [{ model: ExpenseCategory }],}) .then(expenses => res.status(200).send(expenses)) .catch(error => res.status(500).send({ error: error })); 我收到这个错误:
我似乎无法找到我的错误. 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的关联的续集示例 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |