续集 - ORM - 关联不起作用



使用Sequelize with MySQL.我有三个模型。顾问,家庭成员和约会。预约是指顾问和家庭成员。

我已经在约会模型中定义了外键。创建数据库时 - 外键可见 - 当我在约会表上通过 MySQL 客户端检查时。表名是冻结的 - 因此表名没有任何复数的可能性。

顾问模式:

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

预约模式:

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

家庭成员模型:

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

然后在代码中,我尝试获取约会并像这样获取相关的家庭成员和顾问

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

但是我收到错误

未处理承诺拒绝警告:续集急切加载错误:顾问与约会无关!

我想你应该在模型注册后注册你的协会,就像我在这个答案中指出的那样

最新更新