I have two models create_project
and create_stages
, to run the queries I have called the model.associate
in each model
create_project
model
const { DataTypes } = require("sequelize");
const { getConnection } = require("../helper/databaseConnection");
const createProjectModel = {
id: {
type: new DataTypes.INTEGER(),
autoIncrement: true,
primaryKey: true,
},
project_name: {
type: new DataTypes.STRING(),
allowNull: true,
},
project_code: {
type: new DataTypes.STRING(200),
allowNull: true,
},
isActive: {
type: new DataTypes.INTEGER(),
defaultValue: 1,
},
};
let project = null;
const initProjectModel = async () => {
try {
if (project) return project;
const sequelize = await getConnection();
project = sequelize.define("create_project", createProjectModel, {
freezeTableName: true,
});
project.associate = (models) => {
project.hasMany(models.stages, { foreignKey: "project_id" });
};
await project.sync({ alter: true });
return project;
} catch (err) {
console.log(err.message);
}
};
module.exports = { initProjectModel };
create_stage
model
const { DataTypes } = require("sequelize");
const { getConnection } = require("../helper/databaseConnection");
const createStagesModel = {
id: {
type: new DataTypes.INTEGER(),
autoIncrement: true,
primaryKey: true,
},
stages_name: {
type: new DataTypes.STRING(),
allowNull: false,
},
stages_code: {
type: new DataTypes.STRING(200),
allowNull: false,
},
isActive: {
type: new DataTypes.INTEGER(),
defaultValue: 1,
},
};
let stages = null;
const initStagesModel = async () => {
try {
if (stages) return stages;
const sequelize = await getConnection();
stages = sequelize.define("create_stages", createStagesModel, {
freezeTableName: true,
});
stages.associate = (models) => {
stages.belongsTo(models.project, { foreignKey: "project_id" });
};
await stages.sync({ alter: true });
return stages;
} catch (err) {
console.log(err.message);
}
};
module.exports = { initStagesModel };
code I have done to fetch the stages
const express = require("express");
const router = express.Router();
const { initStagesModel } = require("../models/stageModel");
const { initProjectModel } = require("../models/projectModel");
router.get("/:id", async (req, res) => {
try {
const stageData = await initStagesModel();
const projectData = await initProjectModel();
const id = req.params.id;
data = await projectData.findAll({
include: [
{
models: stageData,
},
],
where: { id: id },
});
return res.status(200).send(data);
} catch (err) {
return res.status(400).send(err.stack);
}
});
module.exports = router;
the problem is - it says Element has to be either a Model, an Association or an object.
stack
Error: Include unexpected. Element has to be either a Model, an Association or an object.
at create_project._conformInclude (D:\one to many example\node_modules\sequelize\lib\model.js:323:11)
at D:\one to many example\node_modules\sequelize\lib\model.js:270:61
at Array.map (<anonymous>)
at create_project._conformIncludes (D:\one to many example\node_modules\sequelize\lib\model.js:270:39)
at create_project._baseMerge (D:\one to many example\node_modules\sequelize\lib\model.js:622:10)
at create_project._defaultsOptions (D:\one to many example\node_modules\sequelize\lib\model.js:656:17)
at create_project._injectScope (D:\one to many example\node_modules\sequelize\lib\model.js:2001:10)
at create_project.findAll (D:\one to many example\node_modules\sequelize\lib\model.js:1105:10)
at D:\one to many example\controllers\listStages.js:23:30
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)