英文:
Sequelize Associations Error Users.hasMany called with something that's not a subclass of Sequelize.Model. when associating between 2 models
问题
我在关联两个模型(Users 和 Comments)时遇到了一个错误:“Users.hasMany 调用的参数不是 Sequelize.Model 的子类。” 但是当我移除 const Users = require("./user");
和 Comments.belongsTo(Users, { foreignKey: "userId", onDelete: "cascade" });
这两行代码时,我会得到一个错误:“Users 未与 Comments 关联!” 我已经在用户模型中进行了关联。
这是我的Comments模型:
const { DataTypes } = require("sequelize");
const { sequelize } = require(".");
const Users = require("./user");
const Comments = sequelize.define("Comments", {
comment: {
type: DataTypes.STRING,
allowNull: false,
validate: {
min: 1,
max: 50,
},
},
});
// 如果我从代码中移除这部分,我会得到“Users 未与 Comments 关联!”的错误。
Comments.belongsTo(Users, {
foreignKey: "userId",
onDelete: "cascade",
});
//
module.exports = Comments;
这是我的Users模型:
const { DataTypes } = require("sequelize");
const { sequelize } = require(".");
const Comments = require("./comment");
const jwt = require("jsonwebtoken");
const Users = sequelize.define("Users", {
username: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
validate: {
min: 5,
max: 30,
notNull: true,
},
},
});
Users.hasMany(Comments, {
foreignKey: "userId",
onDelete: "cascade",
});
module.exports = Users;
我还有一个用于检索所有评论的 GET 请求,我想在其中包括 Users 表,以便我可以访问创建该评论的用户的用户名:
const getComments = async (req, res) => {
const comments = await Comments.findAll({
include: Users,
});
res.send(comments);
};
英文:
I am encountering an error Users.hasMany called with something that's not a subclass of Sequelize.Model.
when associating between 2 models (Users and Comments). BUT when i remove const Users = require("./user");
and Comments.belongsTo(Users, { foreignKey: "userId", onDelete: "cascade", });
from the Comments model i instead get "Users is not associated to Comments!"
error. I already associated it in the users model.
This is my model for Comments:
const { DataTypes } = require("sequelize");
const { sequelize } = require(".");
const Users = require("./user");
const Comments = sequelize.define("Comments", {
comment: {
type: DataTypes.STRING,
allowNull: false,
validate: {
min: 1,
max: 50,
},
},
});
// If i remove this from the code i instead get Users is not associated to Comments!
Comments.belongsTo(Users, {
foreignKey: "userId",
onDelete: "cascade",
});
//
module.exports = Comments;
This is my Users model:
const { DataTypes } = require("sequelize");
const { sequelize } = require(".");
const Comments = require("./comment");
const jwt = require("jsonwebtoken");
const Users = sequelize.define("Users", {
username: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
validate: {
min: 5,
max: 30,
notNull: true,
},
},
});
Users.hasMany(Comments, {
foreignKey: "userId",
onDelete: "cascade",
});
module.exports = Users;
I also have a GET request for retrieving all comments where I would like to include the Users table so that I have access to the username of the user that created that comment:
const getComments = async (req, res) => {
const comments = await Comments.findAll({
include: Users,
});
res.send(comments);
};
答案1
得分: 1
你可以定义一个单独的全局方法来处理关联:
const Users = require("./user");
const Comments = require("./comment");
const sequelize = new Sequelize(...);
export const sync = async () => {
Comments.belongsTo(Users, {
foreignKey: "userId",
onDelete: "cascade",
});
Users.hasMany(Comments, {
foreignKey: "userId",
onDelete: "cascade",
});
await sequelize.sync();
}
然后,在初始化数据库/应用程序时使用它:
import { sync } from './path/to/sync';
await sync();
这将确保在关联时两个模型都已定义。
英文:
You could define a separate global method for handling associations:
const Users = require("./user");
const Comments = require("./comment");
const sequelize = new Sequelize(...);
export const sync = async () => {
Comments.belongsTo(Users, {
foreignKey: "userId",
onDelete: "cascade",
});
Users.hasMany(Comments, {
foreignKey: "userId",
onDelete: "cascade",
});
await sequelize.sync();
}
Then, use it when initializing the database/application:
import { sync } from './path/to/sync';
await sync();
This will ensure both models are defined when associated.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论