Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Duvida: relatorio com dados de todas as tabelas.

Olá pessoal tudo bom!

Fico na duvida já que estamos usando o sequelize para fazer as seleções, inclusões etc...

como eu faria para ter um relatório com as informações do Aluno/nome, curso/nome do curso, docente/nome do docente.... sera que daria para fazer pelo having; Sequelize.literal? mas como eu faria a junção das tabelas para montar, ja que o select eh feito via sequeliza..

grato pela ajuda.

3 respostas
solução!

Olá Ademar, tudo bom?

Para gerar um relatório com informações de várias tabelas usando o Sequelize, você pode usar associações (associations) para fazer junções (joins) entre as tabelas. No seu caso, parece que você precisa juntar as tabelas de Aluno, Curso e Docente.

Primeiro, você deve garantir que as associações entre os modelos estão definidas corretamente. Aqui está um exemplo básico de como você poderia definir essas associações:

// Modelo Aluno
const Aluno = sequelize.define('Aluno', {
  nome: {
    type: Sequelize.STRING,
    allowNull: false
  }
});

// Modelo Curso
const Curso = sequelize.define('Curso', {
  nome: {
    type: Sequelize.STRING,
    allowNull: false
  }
});

// Modelo Docente
const Docente = sequelize.define('Docente', {
  nome: {
    type: Sequelize.STRING,
    allowNull: false
  }
});

// Definindo as associações
Aluno.belongsTo(Curso); // Um aluno pertence a um curso
Curso.hasMany(Aluno); // Um curso tem muitos alunos
Curso.belongsTo(Docente); // Um curso pertence a um docente
Docente.hasMany(Curso); // Um docente tem muitos cursos

Depois de definir as associações, você pode usar o método findAll com a opção include para fazer as junções e obter os dados necessários para o seu relatório. Aqui está um exemplo de como você pode fazer isso:

Aluno.findAll({
  attributes: ['nome'],
  include: [
    {
      model: Curso,
      attributes: ['nome'],
      include: [
        {
          model: Docente,
          attributes: ['nome']
        }
      ]
    }
  ]
}).then(alunos => {
  // Processar os dados para o relatório
  alunos.forEach(aluno => {
    console.log(`Aluno: ${aluno.nome}`);
    console.log(`Curso: ${aluno.Curso.nome}`);
    console.log(`Docente: ${aluno.Curso.Docente.nome}`);
  });
}).catch(error => {
  console.error('Erro ao gerar relatório:', error);
});

Neste exemplo, estamos buscando todos os alunos e incluindo os dados do curso e do docente associados. O Sequelize irá gerar as junções SQL necessárias para obter essas informações.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Obrigado Armano, vou testar desta forma....

Pela informação dado pelo Armando, entendi o contexto de criar as associações das tabelas..

Mas ainda ficou a duvida no contexto de como eu processo na chamada, será que tria que criar uma função para fazer a chamada e depois colocar esta função na rota para que possa ser executada pelo postiman?

grato pela ajuda desde já. Ademar