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

PostMan retornou esse erro "Unknown column 'estudante_id' in 'field list'"

ao fazer o metodo GET com o caminho http://localhost:3000/turmas/ o postman retorna isso...

"Unknown column 'estudante_id' in 'field list'"

vendo os erros parecido tentei buscar o erro em outros arquivos mas parece estar correto...

Meu banco de dados tem o estudante_id

Porem é na tabela de matriculas e nao na de turmas onde estou fazendo o GET


MariaDB [escola_ingles]> SELECT * from Matriculas;
+----+------------+--------------+----------+---------------------+---------------------+
| id | status     | estudante_id | turma_id | createdAt           | updatedAt           |
+----+------------+--------------+----------+---------------------+---------------------+
|  1 | confirmado |            1 |        1 | 2023-08-18 23:49:51 | 2023-08-18 23:49:51 |
|  2 | confirmado |            2 |        1 | 2023-08-18 23:49:51 | 2023-08-18 23:49:51 |
|  3 | confirmado |            3 |        2 | 2023-08-18 23:49:51 | 2023-08-18 23:49:51 |
|  4 | confirmado |            4 |        3 | 2023-08-18 23:49:51 | 2023-08-18 23:49:51 |
|  5 | cancelado  |            1 |        2 | 2023-08-18 23:49:51 | 2023-08-18 23:49:51 |
|  6 | cancelado  |            2 |        2 | 2023-08-18 23:49:51 | 2023-08-18 23:49:51 |
+----+------------+--------------+----------+---------------------+---------------------+
6 rows in set (0,001 sec)

MariaDB [escola_ingles]> SELECT * from Turmas;
+----+-------------+------------+----------+---------------------+---------------------+
| id | data_inicio | docente_id | nivel_id | createdAt           | updatedAt           |
+----+-------------+------------+----------+---------------------+---------------------+
|  1 | 2020-02-01  |          6 |        1 | 2023-08-18 23:49:51 | 2023-08-18 23:49:51 |
|  2 | 2020-02-01  |          5 |        2 | 2023-08-18 23:49:51 | 2023-08-18 23:49:51 |
|  3 | 2020-02-01  |          6 |        3 | 2023-08-18 23:49:51 | 2023-08-18 23:49:51 |
|  4 | 2020-07-01  |          6 |        3 | 2023-08-18 23:49:51 | 2023-08-18 23:49:51 |
+----+-------------+------------+----------+---------------------+---------------------+
4 rows in set (0,000 sec)

Meu arquivo turmas dentro de models esta aparentemente correto

"use strict";
module.exports = (sequelize, DataTypes) => {
  const Turmas = sequelize.define(
    "Turmas",
    {
      data_inicio: DataTypes.DATEONLY,
    },
    {}
  );
  Turmas.associate = function (models) {
    Turmas.hasMany(models.Matriculas, {
      foreignKey: "turma_id",
    });
    Turmas.belongsTo(models.Pessoas, {
      foreignKey: "estudante_id",
    });
    Turmas.belongsTo(models.Niveis, {
      foreignKey: "nivel_id",
    });
  };
  return Turmas;
};
2 respostas
solução!

Olá, Diógenes! Tudo bem?

Analisando todas as informações que você compartilhou, me levaram a conclusão que o problema deve estar ocorrendo no seu método GET que busca todas as turmas, já que o erro informa sobre a coluna estudante_id e a mesma não era para ser parâmetro de busca nessa requisição.

Então, peço que se certifique que este método esteja correto, tomando como referência o que feito pelo instrutor. Segue o link para o projeto completo:

No mais, espero ter ajudado e caso o problema continue, compartilhe comigo um trecho do seu código contendo o método GET para "turmas".

Grande abraço e bons estudos!

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

Olá, Armando Barros Alves Junior. Tudo bem?

Método GET

Código do modelo turmas.js:

"use strict";
module.exports = (sequelize, DataTypes) => {
  const Turmas = sequelize.define(
    "Turmas",
    {
      data_inicio: DataTypes.DATEONLY,
    },
    {}
  );
  Turmas.associate = function (models) {
    Turmas.hasMany(models.Matriculas, {
      foreignKey: "turma_id",
    });
    Turmas.belongsTo(models.Pessoas, {
      foreignKey: "estudante_id",
    });
    Turmas.belongsTo(models.Niveis, {
      foreignKey: "nivel_id",
    });
  };
  return Turmas;
};

Link do projeto: https://github.com/diogenespasqualoto/orm-node-sequelize-mysql

Deixei do jeito que acredito estar igual à aula e ao "Faça como eu fiz".

Edição:

Pessoal, consegui resolver o bug até agora (espero não precisar voltar aqui hoje '-' ).

Há alguns pontos que eu não tinha entendido muito bem o "Faça como eu fiz: Controllers e rotas". Estava com sono ou já estava há muito tempo no bug, sei lá.

Primeiro, voltei para o meu último commit e refiz o código. Então, me certifiquei de criar os arquivos:


api/controllers/NivelController.js
api/controllers/TurmaController.js

api/routes/niveisRoute.js
api/routes/turmasRoute.js

E usei os arquivos base deixados pela instrutora Juliana para preencher esses arquivos. Também fiz uma pequena alteração no index.js das rotas:

const bodyParser = require("body-parser");

const pessoas = require("./pessoasRoute");
const niveis = require("./niveisRoute");
const turmas = require("./turmasRoute");

module.exports = (app) => {
  app.use(bodyParser.json(), pessoas, niveis, turmas);
};

E então, encontrei o erro \o/ Em models, no arquivo turmas.js, passei uma foreignKey errada.

CÓDIGO ERRADO:

"use strict";
module.exports = (sequelize, DataTypes) => {
  const Turmas = sequelize.define(
    "Turmas",
    {
      data_inicio: DataTypes.DATEONLY,
    },
    {}
  );
  Turmas.associate = function (models) {
    Turmas.hasMany(models.Matriculas, {
      foreignKey: "turma_id",
    });
    Turmas.belongsTo(models.Pessoas, {
      foreignKey: "estudante_id",
    });
    Turmas.belongsTo(models.Niveis, {
      foreignKey: "nivel_id",
    });
  };
  return Turmas;
};

CODIGO CORRETO

"use strict";
module.exports = (sequelize, DataTypes) => {
  const Turmas = sequelize.define(
    "Turmas",
    {
      data_inicio: DataTypes.DATEONLY,
    },
    {}
  );
  Turmas.associate = function (models) {
    Turmas.hasMany(models.Matriculas, {
      foreignKey: "turma_id",
    });
    Turmas.belongsTo(models.Pessoas, {
      foreignKey: "docente_id",
    });
    Turmas.belongsTo(models.Niveis, {
      foreignKey: "nivel_id",
    });
  };
  return Turmas;
};

Até então, o Postman retorna as turmas normalmente...

Grato pela ajuda! É gratificante corrigir um erro, não é mesmo?