Node.js Sequelize:嵌套包含/反向关联的问题
我对JS和Sequelize非常陌生,现在在查询以下结构时遇到了问题。也许我完全忽略了一些基本点。非常感谢你的帮助 版本:Node.js Sequelize:嵌套包含/反向关联的问题,node.js,postgresql,sequelize.js,Node.js,Postgresql,Sequelize.js,我对JS和Sequelize非常陌生,现在在查询以下结构时遇到了问题。也许我完全忽略了一些基本点。非常感谢你的帮助 版本: 节点:15.13.0 续集:6.6.2 博士后:13.3 pg:8.6.0 pg hstore:2.3.3 结构 航班始终属于一个用户。不同的用户可以对一个航班创建评论。 目标 当我根据航班的ID选择航班时,我希望包括用户的姓名,并且我希望使用创建注释的用户的姓名包括对该航班的所有注释。 问题 我可以在航班上加上评论。但我无法实现其他目标。 当我跑步时: 我将得到错误
- 节点:15.13.0
- 续集:6.6.2
- 博士后:13.3
- pg:8.6.0
- pg hstore:2.3.3
Flight.belongsTo(User)
之后,我将得到错误
Flight.belongsTo调用的东西不是Sequelize.Model的子类
当我在FlightComment中定义userId列时,如下所示:
userId: {
type: DataTypes.UUID,
references: {
model: User,
key: "id",
},
},
在数据库同步期间,我将得到以下错误
Executing (default): DROP TABLE IF EXISTS "FlightComments" CASCADE;
TypeError: Cannot read property 'replace' of undefined
我了解到,您需要在一个文件中定义所有模型,但由于有许多不同的模型,我希望将它们分开
我也没有在官方文件中找到任何建议
模型文件
对于我创建的每个模型,都有一个自己的文件(会有很多不同的模型,所以最好将它们分开)
航班文件:
const Flight = db.sequelize.define("Flight", {
//Many beautiful attributes
});
Flight.hasMany(FlightComment, {
as: "comments",
foreignKey: {
name: "flightId",
allowNull: false,
},
onDelete: "CASCADE",
hooks: true,
});
//Another association
module.exports = Flight;
FlightComment的文件:
const FlightComment = db.sequelize.define("FlightComment", {
id: {
type: Sequelize.UUID,
defaultValue: Sequelize.UUIDV4,
allowNull: false,
primaryKey: true,
},
message: {
type: DataTypes.STRING,
allowNull: false,
},
});
module.exports = FlightComment;
用户的文件:
const User = db.sequelize.define(
"User",
{
id: {
type: Sequelize.UUID,
defaultValue: Sequelize.UUIDV4,
allowNull: false,
primaryKey: true,
},
name: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
},
//Many more attributes
},
);
User.hasMany(Flight, {
as: "flights",
foreignKey: {
name: "userId",
allowNull: false,
},
});
User.hasMany(FlightComment, {
as: "comments",
foreignKey: {
name: "userId",
allowNull: false,
},
onDelete: "CASCADE",
hooks: true,
});
module.exports = User;
const User = db.sequelize.define(
"User",
{
id: {
type: Sequelize.UUID,
defaultValue: Sequelize.UUIDV4,
allowNull: false,
primaryKey: true,
},
name: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
},
//Many more attributes
},
);
User.hasMany(Flight, {
as: "flights",
foreignKey: {
name: "userId",
allowNull: false,
},
});
User.hasMany(FlightComment, {
as: "comments",
foreignKey: {
name: "userId",
allowNull: false,
},
onDelete: "CASCADE",
hooks: true,
});
module.exports = User;