加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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 }));

我收到这个错误:

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的关联的续集示例

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读