Node.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选择航班时,我希望包括用户的姓名,并且我希望使用创建注释的用户的姓名包括对该航班的所有注释。 问题 我可以在航班上加上评论。但我无法实现其他目标。 当我跑步时: 我将得到错误

我对JS和Sequelize非常陌生,现在在查询以下结构时遇到了问题。也许我完全忽略了一些基本点。非常感谢你的帮助

版本:

  • 节点:15.13.0
  • 续集:6.6.2
  • 博士后:13.3
  • pg:8.6.0
  • pg hstore:2.3.3
结构 航班始终属于一个用户。不同的用户可以对一个航班创建评论。

目标 当我根据航班的ID选择航班时,我希望包括用户的姓名,并且我希望使用创建注释的用户的姓名包括对该航班的所有注释。 问题 我可以在航班上加上评论。但我无法实现其他目标。 当我跑步时: 我将得到错误

SequelizeAgerLoadingError:用户未与航班关联

这是可以理解的。所以我尝试将反向关联添加到航班中

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;