Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在Sequelize.js中将默认角色添加到多个关系中_Node.js_Orm_Sequelize.js - Fatal编程技术网

Node.js 在Sequelize.js中将默认角色添加到多个关系中

Node.js 在Sequelize.js中将默认角色添加到多个关系中,node.js,orm,sequelize.js,Node.js,Orm,Sequelize.js,我有两个通过多对多关系连接的Sequelize.js模型 用户: 角色: 表用户角色是自动创建的 在创建新的用户时,如何设置将插入到用户角色中的默认角色?有没有办法在模型定义中定义它,或者我只需要创建User新用户,然后在一个事务中创建关系?首先,您需要为用户角色创建一个模型,在创建之后,您必须在用户模型中设置一个钩子,该钩子将自动将角色插入到用户角色表中 这就是你能做到的 例如: 用户模型 const { hooks } = require('./user-role.hook'); modul

我有两个通过多对多关系连接的
Sequelize.js
模型

用户:

角色:

用户角色
是自动创建的


在创建新的
用户
时,如何设置将插入到
用户角色中的默认角色?有没有办法在模型定义中定义它,或者我只需要创建
User
新用户,然后在一个事务中创建关系?

首先,您需要为用户角色创建一个模型,在创建之后,您必须在用户模型中设置一个钩子,该钩子将自动将角色插入到用户角色表中

这就是你能做到的

例如:

用户模型

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;
};
挂钩文件

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

很好,如果我需要在一次交易中完成呢?可能吗?是的,如果您使用事务,您必须在用户创建之后调用它,在这种情况下,不要使用钩子。
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;
};
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);
}