Relacionamento no sequelize - BelongsToMany | Fórum | School of Net

Deseja poder participar de nosso fórum e tirar todas as suas dúvidas?
Clique aqui e assine nosso plano de acesso ilimitado. Saiba mais.

por Alan Robson

1 semana, 1 dia atrás Alan Robson

Relacionamento no sequelize - BelongsToMany

Bom dia! Gostaria de uma ajuda. Estou fazendo um projeto e nesse projeto possuo duas tabelas nivel_acesso e permissao. O relacionamento entre elas da origem a uma nova que é nivel_acesso_permissao. Criei o model NivelAcesso e o Model Permissao: ``` /*NivelAcesso*/ module.exports = function(sequelize, DataTypes){ var NivelAcesso = sequelize.define('nivel_acesso', { id_nivel_acesso: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true, }, 'nivel_acesso': DataTypes.STRING, }, { tableName: 'nivel_acesso' }); return NivelAcesso; } /*Permissao*/ module.exports = function(sequelize, DataTypes){ var Permissao = sequelize.define('permissao', { id_permissao: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true, }, 'permissao': DataTypes.STRING, }, { tableName: 'permissao' }); return Permissao; } ``` Depois criei a associação: ``` db.NivelAcesso.belongsToMany(db.Permissao, {as : 'NivelPermissao', through: 'nivel_acesso_permissao', foreignKey : {name: 'fk_nivel_acesso', allowNull: false}}); db.Permissao.belongsToMany(db.NivelAcesso, {as : 'NivelPermissao', through: 'nivel_acesso_permissao', foreignKey : {name: 'fk_permissao', allowNull: false}}); ``` No formulário de cadastro de nivel de acesso, eu estou persistindo os dados da seguinte forma: ``` {"nivel_acesso":"visitante","checkbox_permissao":["3","4","7","8"]} ``` E estou gravando assim: ``` app.post('/cadastrar', function(req, res){ let nivel_acesso = new models.NivelAcesso(req.body); //mass assignment nivel_acesso.save().then(async function(rNivel){ await rNivel.addNivelPermissao(req.body.checkbox_permissao); res.redirect('/nivel_acesso/'); }); }); ``` Até ai, está funcionando perfeitamente. Utilizei o metodo mágico add para salvar os registros na tabela de ligação e funciona perfeitamente. A grande dificuldade que estou tendo é para fazer o update e fazer o delete. ``` /* UPDATE */ app.put('/editar/:id',async function(req, res){ models.NivelAcesso.update(req.body,{ where: { id_nivel_acesso : req.params.id }}).then(async function(rNivel){ await rNivel.addNivelPermissao(req.body.checkbox_permissao); res.redirect('/nivel_acesso'); }); }); ``` O seguinte erro me é apresentado quando tento alterar:``` Unhandled rejection TypeError: rNivel.addNivelPermissao is not a function at C:\node\controle-livros-node\routes\nivel_acesso.js:106:17 at tryCatcher (C:\node\controle-livros-node\node_modules\bluebird\js\release\util.js:16:23) at Promise._settlePromiseFromHandler (C:\node\controle-livros-node\node_modules\bluebird\js\release\promise.js:512:31) at Promise._settlePromise (C:\node\controle-livros-node\node_modules\bluebird\js\release\promise.js:569:18) at Promise._settlePromise0 (C:\node\controle-livros-node\node_modules\bluebird\js\release\promise.js:614:10) at Promise._settlePromises (C:\node\controle-livros-node\node_modules\bluebird\js\release\promise.js:693:18) at Async._drainQueue (C:\node\controle-livros-node\node_modules\bluebird\js\release\async.js:133:16) at Async._drainQueues (C:\node\controle-livros-node\node_modules\bluebird\js\release\async.js:143:10) at Immediate.Async.drainQueues [as _onImmediate] (C:\node\controle-livros-node\node_modules\bluebird\js\release\async.js:17:14) at runCallback (timers.js:789:20) at tryOnImmediate (timers.js:751:5) at processImmediate [as _immediateCallback] (timers.js:722:5) ``` Será que podem me dar uma luz de como fazer o update e o delete? Obrigado.

2 Respostas