I am not being able to make an association between my models, I am using postman to consult a specific provider, for example: Get in http://localhost:3000/api/proveedores/1
My relationship is one to one. In my database I have a related user and provider. I attach my models, controller, my index file in /models.
const { DataTypes } = require('sequelize');
const { sequelize } = require('../config/db');
const Proveedor = require('./proveedor');
const Usuario = sequelize.define('Usuario', {
idUsuario: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
},
nombreCompleto: {
type: DataTypes.STRING(50),
allowNull: false,
},
usuario: {
type: DataTypes.STRING(45),
allowNull: false,
},
contraseña: {
type: DataTypes.STRING(100),
allowNull: false,
},
tipoUsuario: {
type: DataTypes.STRING(45),
allowNull: false,
},
}, {
tableName: 'Usuario'
});
Usuario.associate = (models) => {
Usuario.hasOne(models.Proveedor, {foreignKey: 'Usuario_idUsuario'});
};
module.exports = Usuario;
const { DataTypes } = require('sequelize');
const { sequelize } = require('../config/db');
const Usuario = require('./Usuario.js');
const Proveedor = sequelize.define('Proveedor', {
idProveedor: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
},
Usuario_idUsuario: {
type: DataTypes.INTEGER,
allowNull: false,
references: {
model: Usuario,
key: 'idUsuario'
}
},
ruc: {
type: DataTypes.STRING(11),
allowNull: false,
},
razonSocial: {
type: DataTypes.STRING(45),
allowNull: false,
},
direccion: {
type: DataTypes.STRING(80),
allowNull: false,
},
distrito: {
type: DataTypes.STRING(45),
allowNull: false,
},
provincia: {
type: DataTypes.STRING(45),
allowNull: false,
},
departamento: {
type: DataTypes.STRING(45),
allowNull: true,
},
}, {
tableName: 'Proveedor'
});
Proveedor.associate = (models) => {
Proveedor.belongsTo(models.Usuario, {foreignKey: 'Usuario_idUsuario'});
};
module.exports = Proveedor;
const { Sequelize} = require('sequelize');
const sequelize = require('../config/db').sequelize;
const Usuario = require('./Usuario.js');
const Proveedor = require('./proveedor');
const Empresa = require('./empresa');
const Material = require('./material');
const Compra = require('./compra');
const DetalleCompra = require('./detallecompra');
const db = {
sequelize,
Sequelize,
Usuario,
Proveedor,
Empresa,
Material,
Compra,
DetalleCompra,
};
// Aplicar las asociaciones
Object.keys(db).forEach(modelName => {
if (db[modelName].associate) {
db[modelName].associate(db);
}
});
module.exports = db;
exports.getProveedorById = async (req, res) => {
const { id } = req.params;
try {
console.log(`Buscando proveedor con ID: ${id}`); // Registro de depuración
const proveedor = await Proveedor.findByPk(id, {
include: {
model: Usuario,
// as: 'usuario', // Asegúrate de que este alias coincida con la asociación en los modelos
// attributes: ['nombreCompleto', 'usuario']
}
});
if (!proveedor) {
console.log(`Proveedor con ID: ${id} no encontrado`); // Registro de depuración
return res.status(404).json({ error: 'Proveedor no encontrado' });
}
res.status(200).json(proveedor);
} catch (error) {
console.error('Error al obtener el proveedor:', error); // Registro de depuración
res.status(500).json({ error: 'Error al obtener el proveedor', details: error.message });
}
};