Eu já sei o que ocorre, só não achei como resolver. Acontece que meu model de turma não está gerando os campos corretamente. Na verdade ele até gera minha chaves estrangeiras com nome personalizado(docente_id), porém ele gera a automática também (PessoaId) causando o erro "Unknown column 'PessoaId' in 'field list'". Conseguir "resolver" entre muitas aspas, refazendo as migrações, alterando os campos de foreign key para o nome que é gerado automaticamente pelo sequelize, mas esse não é o correto e gostaria de saber como posso resolver.
model turmas:
'use strict';
const {
Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class Turmas extends Model {
static associate(models) {
Turmas.hasMany(models.Matriculas, {
foreignKey: 'turma_id'
});
Turmas.belongsTo(models.Pessoas);
Turmas.belongsTo(models.Niveis);
}
}
Turmas.init({
data_inicio: DataTypes.DATEONLY
}, {
sequelize,
modelName: 'Turmas',
});
return Turmas;
};
model pessoas (FK de turma)
'use strict';
const {
Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class Pessoas extends Model {
static associate(models) {
Pessoas.hasMany(models.Matriculas, {
foreignKey: 'estudante_id'
});
Pessoas.hasMany(models.Turmas, {
foreignKey: 'docente_id'
});
}
}
Pessoas.init({
nome: DataTypes.STRING,
ativo: DataTypes.BOOLEAN,
email: DataTypes.STRING,
role: DataTypes.STRING
}, {
sequelize,
modelName: 'Pessoas',
});
return Pessoas;
};
model niveis (FK turmas)
'use strict';
const {
Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class Niveis extends Model {
/**
* Helper method for defining associations.
* This method is not a part of Sequelize lifecycle.
* The `models/index` file will call this method automatically.
*/
static associate(models) {
Niveis.hasMany(models.Turmas, {
foreignKey: 'nivel_id'
});
}
}
Niveis.init({
desc_nivel: DataTypes.STRING
}, {
sequelize,
modelName: 'Niveis',
});
return Niveis;
};
migrate create-turmas:
'use strict';
module.exports = {
async up(queryInterface, Sequelize) {
await queryInterface.createTable('Turmas', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
data_inicio: {
type: Sequelize.DATEONLY
},
docente_id: {
allowNull: false,
type: Sequelize.INTEGER,
references: { model: 'Pessoas', key: 'id' }
},
nivel_id: {
allowNull: false,
type: Sequelize.INTEGER,
references: { model: 'Niveis', key: 'id' }
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
async down(queryInterface, Sequelize) {
await queryInterface.dropTable('Turmas');
}
};
Controller e route tenho 100% de certeza que está correto mas se quiser ver estarei anexando meu repositório do GitHub. Eu configurei um debuger e consegui essa print que mostra os campos duplicados em um objeto, veja:
Bom, isso é tudo espero que consigam me ajudar!
PS: O código pode estar diferente da aula pois a versão é mais atual. Link do meu repositório caso queira ver melhor: https://github.com/Alyson02/ORM-com-Node