微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

postgresql – 包含相关模型时的Sequelize Eager Loading Error

我正在使用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 举报,一经查实,本站将立刻删除。

相关推荐