我有一个用户表,其中有一个外键列指向角色表。
我在mysql中定义了所有关系,并使用sequelize-auto
生成了我的模型。
用户的生成模型如下:
const user = sequelize.define('user', {
Id: {
type: DataTypes.INTEGER(11),
allowNull: false,
primaryKey: true,
autoIncrement: true,
},
Email: {
type: DataTypes.STRING(45),
allowNull: false,
unique: true,
},
RoleId: {
type: DataTypes.INTEGER(11),
allowNull: false,
references: {
model: 'roles',
key: 'Id',
},
},
});
我曾认为我的参考文献已经设置好了,因此在我的解析器中执行以下操作:
users: async () => {
const users = await db.user.findAll({
include: [
{
model: db.roles,
},
],
});
return users
我应该通过playground在以下查询中获得用户角色列表:
{users
{roles
{Name, Id}
}
}
相反,我得到了:
角色未与用户关联!
后来我发现我需要建立一个关联:
user.associate = models => {
user.hasMany(models.roles, {
foreignKey: 'Id',
sourceKey: 'RoleId',
onDelete: 'cascade',
});
};
然后它起作用了。
我仍然不明白用户模型中这个是干什么的?
references: {
model: 'roles',
key: 'Id',
},
我认为这是由于我与“roles”表的“关联”,但如果没有明确添加关联,则什么都不会发生。请问有人可以解释一下“references”字段的含义吗?
sequelize-auto
的当前版本为 0.7.5,可以自动生成关联。 - Steve Schmitt