我有两个通过多对多关系连接的 Sequelize.js
模型。
用户:
module.exports = (sequelize, DataTypes) => {
const model = sequelize.define('User', {
email: {
type: DataTypes.STRING,
unique: true,
allowNull: false
},
password: {
type: DataTypes.CHAR,
length: 60,
allowNull: false
}
}
});
model.associate = models => {
model.belongsToMany(models.Role, {
hooks: true,
through: 'user_roles'
})
};
return model;
};
角色:
module.exports = (sequelize, DataTypes) => {
const model = sequelize.define('Role',
{
name: {
type: DataTypes.STRING,
unique: false,
allowNull: false
}
}
);
model.associate = models => {
model.belongsToMany(models.User, {
hooks: true,
through: 'user_roles'
});
};
return model;
};
表user_roles
自动创建。
如何设置在创建新用户
时将插入到user_roles
中的默认角色?有没有办法在模型定义中定义它,或者我只是应该创建 User
新用户,然后在一个事务中创建关系?
最佳答案
首先,您需要为 user_roles 创建一个模型,创建后您必须在用户模型中设置一个 Hook ,该 Hook 将自动将角色插入到 user_roles 表中。
这就是你可以做到的。
例如:
用户模型
const { hooks } = require('./user-role.hook');
module.exports = (sequelize, DataTypes) => {
const model = sequelize.define('User', {
email: {
type: DataTypes.STRING,
unique: true,
allowNull: false
},
password: {
type: DataTypes.CHAR,
length: 60,
allowNull: false
}
}, { hooks });
model.associate = models => {
model.belongsToMany(models.Role, {
hooks: true,
through: 'user_roles'
})
};
return model;
};
Hook 文件
exports.hooks = {
afterCreate: (User, payload) => {
AddUserRole(User, payload);
}
}
function AddUserRole(User, payload) {
let InsertArr = {
user_id: User._id,
role_id: 1 // pass default role id
}
model.UserRole.create(InsertArr);
}
关于node.js - 在 Sequelize.js 中为多对多关系添加默认角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57947640/