【问题标题】:SequelizeEagerLoadingError in associated models关联模型中的 SequelizeEagerLoadingError
【发布时间】:2018-12-18 01:26:45
【问题描述】:

当我在查询中添加包含时遇到问题,我不知道为什么。我有两个模型:UserTransaction

用户

    module.exports = (sequelize, DataTypes) => {
      var User = sequelize.define('User', {
        firstName: DataTypes.STRING,
        lastName: DataTypes.STRING,
        email: DataTypes.STRING
      }, {});
      User.associate = function(models) {
        User.hasMany(models.Transaction, {
          foreignKey: 'senderId',
          as: 'sender',
        }),
        User.hasMany(models.Transaction, {
          foreignKey: 'receiverId',
          as: 'receiver',
        })
      };
      return User;
    };

交易

  module.exports = (sequelize, DataTypes) => {
    var Transaction = sequelize.define('Transaction', {
      amount: DataTypes.INTEGER
    }, {});
    Transaction.associate = function(models) {
      Transaction.belongsTo(models.User, {
        foreignKey: 'senderId'
      }),
      Transaction.belongsTo(models.User, {
        foreignKey: 'receiverId'
      })
    };
    return Transaction;
  };

迁移后senderId和receiverId都在db中可用。

尝试查询:

  Transaction
    .findAll({
      where: { senderId: req.params.userId },
      include: [{
        model: User,
        as: 'sender',
      },{
        model: User,
        as: 'receiver',
      }],
    })

预期结果:

  {
    "transactions": [
      {
        "id": 2,
        "amount": 300,
        "sender": {
          "id": 2,
          "firstName": "John",
          "lastName": "Doe",
          "email": "jdoe+123@gmail.com",
        },
        "receiver": {
          "id": 3,
          "firstName": "John1",
          "lastName": "Doe1",
          "email": "jdoe+132@gmail.com",
        }
      },
      {
        "id": 3,
        "amount": 900,
        "sender": {
          "id": 2,
          "firstName": "John",
          "lastName": "Doe",
          "email": "jdoe+123@gmail.com",
        },
        "receiver": {
          "id": 3,
          "firstName": "John1",
          "lastName": "Doe1",
          "email": "jdoe+132@gmail.com",
        }
      }
    ]
  }

但我收到错误:SequelizeEagerLoadingError

他们的关联或查询有问题吗?

【问题讨论】:

    标签: node.js express sequelize.js


    【解决方案1】:

    您需要为其中一个或两个关联添加别名,目前它们正在相互覆盖。 比如:

    module.exports = (sequelize, DataTypes) => {
      var Transaction = sequelize.define('Transaction', {
        amount: DataTypes.INTEGER
      }, {});
      Transaction.associate = function(models) {
        Transaction.belongsTo(models.User, {
          as: 'sender',
          foreignKey: 'senderId'
        }),
        Transaction.belongsTo(models.User, {
          as: 'receiver',
          foreignKey: 'receiverId'
        })
      };
      return Transaction;
    };
    

    【讨论】:

      猜你喜欢
      • 2020-09-02
      • 2019-08-06
      • 2022-10-23
      • 1970-01-01
      • 2019-07-29
      • 1970-01-01
      • 2018-05-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多