Cod*_*tle 5 javascript sequelize.js graphql sequelize-auto
我有一个用户表,其中有一个角色表的外键列。
我在 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',
},
},
});
Run Code Online (Sandbox Code Playgroud)
我认为我的参考已设置,因此当我在解析器中执行以下操作时:
users: async () => {
const users = await db.user.findAll({
include: [
{
model: db.roles,
},
],
});
return users
Run Code Online (Sandbox Code Playgroud)
我应该在操场上使用以下查询返回用户角色列表:
{users
{roles
{Name, Id}
}
}
Run Code Online (Sandbox Code Playgroud)
相反我得到了
角色未与用户关联!
后来我发现我需要建立一个关联:
user.associate = models => {
user.hasMany(models.roles, {
foreignKey: 'Id',
sourceKey: 'RoleId',
onDelete: 'cascade',
});
};
Run Code Online (Sandbox Code Playgroud)
然后就成功了。
我仍然不明白这在用户模型中有何用处?:
references: {
model: 'roles',
key: 'Id',
},
Run Code Online (Sandbox Code Playgroud)
我认为这是我与角色表的“关联”,但如果没有我明确添加关联,这根本没有任何作用。有人可以解释一下field的含义吗references?