gpt4 book ai didi

Sequelize association arent incialized(封锁化关联尚未明朗化)

转载 作者:bug小助手 更新时间:2023-10-24 21:52:41 25 4
gpt4 key购买 nike



hello im tryng to use include on a query on sequelize but it returns that the two tables are not related

您好,IM尝试在Sequelize上的查询中使用INCLUDE,但它返回的是这两个表不相关


model atestado
it contains atestado data and two FKs one from medicoModel and another one from pacienteModel

Model atestado它包含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;
};

model medico

模范医学生


'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;
};


index

指标


'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;


and the Controller

和控制器


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();


I tried to use include on a query on atestadomodel including medicomodel but i got this error:

我试图在包括medicomodel在内的testadomodel上的查询中使用include,但我得到了这个错误:


EagerLoadingError [SequelizeEagerLoadingError]: Medico is not associated to Atestado!
at Atestado._getIncludedAssociation (/home/ficdev/GestaoAtestado/node_modules/sequelize/lib/model.js:565:13)
at Atestado._validateIncludedElement (/home/ficdev/GestaoAtestado/node_modules/sequelize/lib/model.js:502:53)
at /home/ficdev/GestaoAtestado/node_modules/sequelize/lib/model.js:421:37
at Array.map ()
at Atestado._validateIncludedElements (/home/ficdev/GestaoAtestado/node_modules/sequelize/lib/model.js:417:39)
at Atestado.findAll (/home/ficdev/GestaoAtestado/node_modules/sequelize/lib/model.js:1124:12)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async show (/home/ficdev/GestaoAtestado/src/app/controllers/atestadoControllerGestor.js:32:30)

EagerLoadingError[SequelizeEagerLoadingError]:MEDIO与Aestado无关!Aestado._getIncludedAssociation(/home/ficdev/GestaoAtestado/node_modules/sequelize/lib/model.js:565:13)at Aestado._valiateIncludedElement(/home/ficdev/GestaoAtestado/node_modules/sequelize/lib/model.js:502:53)at/home/ficdev/GestaoAtestado/node_modules/sequelize/lib/model.js:421:37 at Array.map()at Aestado._validate IncludedElements(/home/ficdev/GestaoAtestado/node_modules/sequelize/lib/model.js:417:39)at Aestado.findAll进程中的(/home/ficdev/GestaoAtestado/node_modules/sequelize/lib/model.js:1124:12)。进程中的TicksAnd拒绝(节点:内部/进程/任务_队列:95:5)在异步显示(/home/ficdev/GestaoAtestado/src/app/controllers/atestadoControllerGestor.js:32:30)中


更多回答

I would make sure that those hasMany() calls are actually happening, also I've always set up "hasMany" in one direction and "hasOne" in the other just to make sure.

我会确保那些hasMany()调用确实在发生,而且我总是在一个方向上设置“hasMany”,在另一个方向上设置“hasone”,只是为了确保。

优秀答案推荐

Just use initialized models from index and don't import them once again directly (because that way you register them once again without any associations):

只需使用索引中的初始化模型,而不会再次直接导入它们(因为这样您就可以在没有任何关联的情况下再次注册它们):


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]
});
...

更多回答

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com