你好,我尝试在sequelize的查询中使用include,但它返回两个表不相关
模型阿泰斯塔多 它包含 atestado 数据和两个 FK,一个来自 medicoModel,另一个来自 pacienteModel
'use strict';
const config = require('../config/config');
const { Sequelize, DataTypes } = require('sequelize');
const sequelize = new Sequelize(process.env.DEV_DATABASE_URL, {
dialect: 'postgres' // Adicione esta linha para especificar o dialeto
});
const medicoModel = require("./medicomodel")(sequelize, DataTypes);
const pacienteModel = require('./pacientemodel')(sequelize, DataTypes);
module.exports = (sequelize, DataTypes) => {
const atestadoModel = sequelize.define('atestadoModel', {
medicoFK: {
type: DataTypes.STRING,
references:{
model: medicoModel,
key: 'rg'
}
},
pacienteFK: {
type: DataTypes.STRING,
references:{
model: pacienteModel,
key: 'rg'
}
},
InativeAt: DataTypes.DATE
}, {
tableName: 'atestado',
paranoid: true,
deletedAt: 'InativeAt'
});
atestadoModel.associate = (models) => {
atestadoModel.belongsTo(models.medicoModel, { foreignKey: 'medicoFK' });
atestadoModel.belongsTo(models.pacienteModel, { foreignKey: 'pacienteFK' });
};
return atestadoModel;
};
医学模范
'use strict';
module.exports = (sequelize, DataTypes) => {
const medicoModel = sequelize.define('medicoModel', {
rg: DataTypes.STRING,
InativeAt: DataTypes.DATE
}, {
tableName: 'medico',
paranoid: true,
deletedAt: 'InativeAt'
});
medicoModel.associate = (models) => {
medicoModel.hasMany(models.atestadoModel, { foreignKey: 'medicoFK' });
};
return medicoModel;
};
索引
'use strict';
const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const process = require('process');
const basename = path.basename(__filename);
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.js')[env];
const db = {};
let sequelize;
if (config.use_env_variable) {
sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
sequelize = new Sequelize(config.database, config.username, config.password, config);
}
fs
.readdirSync(__dirname)
.filter(file => {
return (
file.indexOf('.') !== 0 &&
file !== basename &&
file.slice(-3) === '.js' &&
file.indexOf('.test.js') === -1
);
})
.forEach(file => {
const model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes);
db[model.name] = model;
});
Object.keys(db).forEach(modelName => {
if (db[modelName].associate) {
db[modelName].associate(db);
}
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;
和控制器
const config = require('../database/config/config');
const { Sequelize, DataTypes } = require('sequelize');
const sequelize = new Sequelize(process.env.DEV_DATABASE_URL, {
dialect: 'postgres' // Adicione esta linha para especificar o dialeto
});
const medicoModel = require('../database/models/medicomodel')(sequelize, DataTypes);
const atestadoModel = require('../database/models/atestadomodel')(sequelize, DataTypes);
class AtestadoController {
async show(req, res) {
try {
const atestado = await atestadoModel.findAll({
include: [medicoModel]
});
res.status(200).json(atestado);
} catch (error) {
console.error(error);
res.status(404).json({ error: 'Ocorreu um erro ao buscar os atestados.' });
}
}
}
module.exports = new AtestadoController();
我尝试在 atestadomodel 上的查询中使用 include,包括 medicomodel,但出现此错误:
EagerLoadingError [SequelizeEagerLoadingError]:Medico 与 Atestado 没有关联! 在 Atestado._getIncludedAssociation (/home/ficdev/GestaoAtestado/node_modules/sequelize/lib/model.js:565:13) 在 Atestado._validateIncludedElement (/home/ficdev/GestaoAtestado/node_modules/sequelize/lib/model.js:502:53) 在/home/ficdev/GestaoAtestado/node_modules/sequelize/lib/model.js:421:37 在Array.map() 在 Atestado._validateIncludedElements (/home/ficdev/GestaoAtestado/node_modules/sequelize/lib/model.js:417:39) 在 Atestado.findAll (/home/ficdev/GestaoAtestado/node_modules/sequelize/lib/model.js:1124:12) 在 process.processTicksAndRejections (节点:内部/进程/task_queues:95:5) 在异步表演中(/home/ficdev/GestaoAtestado/src/app/controllers/atestadoControllerGestor.js:32:30)
只需使用
index
中的初始化模型,不要直接再次导入它们(因为这样你就可以在没有任何关联的情况下再次注册它们):
const config = require('../database/config/config');
const { Sequelize, DataTypes } = require('sequelize');
const { medicoModel, atestadoModel } = require('../database/models');
class AtestadoController {
async show(req, res) {
try {
const atestado = await atestadoModel.findAll({
include: [medicoModel]
});
...