Série da semana: Primeiros passos no Angular

Veja mais

Fazer um update no sequelize com associação hasToMany.

25/04/2019

11

Boa noite. Estou postando aqui porque já cansei de abrir,literalmente, uns 300 links da internet kkk .
Não estou conseguindo fazer um update no sequelize com associacao hasToMany. Não funciona comigo nem a pau..
O create com associacao eu penei mas consegui fazer.já update tá brabo.até usando o método "sequelize.query()" eu não consigo, porque
tenho que executar multiplas querys( update tabela set campo = "x") e recebo erro de sintaxe..enfim tenho duas tabelas "parceiro" e "horario_funcionamento" , que estão mapeadas no model do sequelize ; quando eu atualizar a tabela "parceiro", eu quero no mesmo comando atualizar os horarios na outra tabela..ve se alguem pode me ajudar...grato script das tabelas abaixo

CREATE TABLE parceiro    ( id            INT AUTO_INCREMENT PRIMARY KEY
                          , nome          VARCHAR(100) NOT NULL
                          , cnpj          VARCHAR(15)
                          , ie            VARCHAR(15)
                          , email         VARCHAR(50)
                          , senha         VARCHAR(50)
                          , telefone1     VARCHAR(20)
                          , telefone2     VARCHAR(20)     
                          , situacao      CHAR(1) DEFAULT 'a'
                          , logradouro    VARCHAR(50)
                          , complemento   VARCHAR(50)
                          , nro           VARCHAR(5)
                          , bairro        VARCHAR(50)
                          , cidade        VARCHAR(50)
                          , cep           VARCHAR(8)
                          , dt_inclusao   TIMESTAMP DEFAULT CURRENT_TIMESTAMP
                          , dt_alteracao  DATETIME
                          );

create table horario_funcionamento( id           INT AUTO_INCREMENT PRIMARY KEY
                                  , parceiro_id  INT NOT NULL
                                  , hora_ini     VARCHAR(5) NOT NULL
                                  , hora_fim     VARCHAR(5) NOT NULL
                                  , dia          INT NOT NULL
                                  , situacao     CHAR(1) DEFAULT 'a'
                                  , dt_inclusao  TIMESTAMP DEFAULT CURRENT_TIMESTAMP
                                  , dt_alteracao DATETIME);

--- UPDATE NO SEQUELIZE ( NAO FUNCIONA)


  Parceiro.hasMany(HorarioFuncionamento, { foreignKey: "parceiro_id" });
    
  Parceiro.findByPk(id, {
    include: HorarioFuncionamento
  })
    .then(parceiro => {
      if (parceiro) {
        parceiro.update(
          {
            nome: nome,
            telefone1: telefone1,
            telefone2: telefone2,
            nro: nro,
            cep: cep,
            cidade: cidade,
            bairro: bairro,
            complemento: complemento,
            logradouro: logradouro,
            email: email,
            cnpj: cnpj,
            ie: ie,
            horario_funcionamentos: horarios  /* ARRAY de horarios*/
          }
        ), { include: HorarioFuncionamento }
          .then(() => {
            response.status(status.OK).send();
          })
          .catch(error => next(error));
      } else {
        response.status(status.NOT_FOUND).send();
      }
    })
    .catch(error => next(error)); 


Essa dúvida foi gerada a partir de um comentário na aula Criando um Model com o Sequelize - Minha Primeira API RESTful com Node.js - Vídeo 5
Responder

Posts

25/04/2019

Ramiro Porto

galera, boa noite. Não sei se é o jeito certo ou se é uma gambiarra,mas consegui resolver o meu problema de outra forma, utilizando o "Promise.all".
Aparentemente, está funcionamento corretamente e com controle de transação. Segue abaixo o código, para que possa também ajudar alguém futuramente.

Parceiro.findByPk(id)
.then(parceiro => {

if (parceiro) {

const dtAlteracao = Date.now();

sequelize.transaction(function (t) {

var promises = []

var promiseUpdate = Parceiro.update({
nome: nome, telefone1: telefone1, telefone2: telefone2,
nro: nro, cep: cep, cidade: cidade, bairro: bairro,
complemento: complemento, logradouro: logradouro, email: email, cnpj: cnpj,
ie: ie, dt_alteracao: dtAlteracao
}, { where: { id: parceiro.id }, transaction: t });


console.log(parceiro.id);
promises.push(promiseUpdate);

for (var i = 0; i < horarios.length; i++) {
var hPromise = HorarioFuncionamento.update({
hora_ini: horarios[i].hora_ini,
hora_fim: horarios[i].hora_fim,
dia: horarios[i].dia,
situacao: horarios[i].situacao,
dt_alteracao: dtAlteracao
}, { where: { id: horarios[i].id }, transaction: t });
promises.push(hPromise);
};
return Promise.all(promises);

}).then(function () {
console.log("SUCCESS!!! ( commit)");
response.status(status.OK).send();
}).catch(function (err) {
console.log("FAILURE !!! ( rollback)");
return next(err);
});

}
}).catch(error => next(error));
};
Responder