SOLVED - Sequelize - ORM - Associations not working

亡梦爱人 提交于 2021-01-29 14:30:29

问题


Using Sequelize with MySQL. I have three models. Consultant, FamilyMember and Appointments. Appointment refers to Consultant and FamilyMember.

I have defined the foreign keys in the Appointment model. When the DB is created - the foreign keys are visible - when I check through a MySQL client, on the appointment table. The table names are freeze - so there isn't any chance of pluralization of the table names.

Consultant Model:

module.exports = (sequelize, DataTypes) => {
const consultant = sequelize.define('consultant', {
  ID: {
    type: DataTypes.UUID,
    primaryKey: true,
    allowNull: false
  },
  FirstName: {
    type: DataTypes.STRING,
    allowNull: false
  },
  LastName: {
    type: DataTypes.STRING,
    allowNull: false
  }
{
  freezeTableName: true 
}
);

return consultant;
};

Appointment Model:

module.exports = (sequelize, DataTypes) => {
const appointment = sequelize.define('appointment', {
  // attributes
  ID: {
    type: DataTypes.UUID,
    primaryKey: true,
    allowNull: false
  },
  ConsultantID: {
    type: DataTypes.UUID,
    allowNull: false,
    references: {         
      model: 'consultant',
      key: 'ID'
    }
  },
  FamilyMemberID: {
    type: DataTypes.UUID,
    allowNull: false,
    references: {         
      model: 'familymember',
      key: 'ID'
    }
  }
}, 
{
  freezeTableName: true 
}
);

appointment.associate = function (models) {
  models.appointment.belongsTo(models.consultant, {
    foreignKey: 'ConsultantID',
    as: 'consultant',
  });
  models.appointment.belongsTo(models.familymember, {
    foreignKey: 'FamilyMemberID',
    as: 'familymember',
  });
};

return appointment;
};

Family Member model:

module.exports = (sequelize, DataTypes) => {
const familymember = sequelize.define('familymember', {
  // attributes
  ID: {
    primaryKey: true,
    type: DataTypes.UUID,
    allowNull: false
  },
  FamilyID: {
    type: DataTypes.UUID,
    allowNull: false
  },
  FirstName: {
    type: DataTypes.STRING,
    allowNull: false
  },
  LastName: {
    type: DataTypes.STRING,
    allowNull: false
  }
}, 
{
  freezeTableName: true 
}
);
return familymember;
};

Then in the code I try to fetch appointment and get the related familymember and consultant like this

    var appointments = await Appointment.findAll({
        where: {
            AppointmentDateConfirmed: {
                $gte: moment().subtract(0, 'days').toDate()
              }
        }, include:[Consultant, FamilyMember]
    }
    )

However I get an error

UnhandledPromiseRejectionWarning: SequelizeEagerLoadingError: consultant is not associated to appointment!


回答1:


I suppose you should register your associations after models registration like I pointed in this answer



来源:https://stackoverflow.com/questions/62660039/solved-sequelize-orm-associations-not-working

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!