javascript - 如何使用 sequelize 从 2 个表中查询信息

标签 javascript database postgresql sequelize.js

所以我有两个表:Class 和 Course。每个类(class)都有一个 course_id,用于定义它在 Course 表中的类(class)类型。这是我的模型:

const Class = sequelize.define('class', {
  class_date: Sequelize.DATE,
  begin_time: Sequelize.TIME,
  end_time: Sequelize.TIME,
  max_capacity: Sequelize.INTEGER,
  is_published: Sequelize.BOOLEAN,
  training_facility_id: Sequelize.INTEGER,
  state_id: Sequelize.INTEGER,
  registration_deadline: Sequelize.DATE,
  course_id: Sequelize.INTEGER,
  is_report_60_generated: Sequelize.BOOLEAN,
  completed_by_user_id: Sequelize.INTEGER
}, {
  timestamps: false,
  freezeTableName: true
})

const Course = sequelize.define('course', {
  code: Sequelize.STRING,
  name: Sequelize.STRING
 }, {
  timestamps: false,
  freezeTableName: true
})

当我点击类端点时,我得到了一个类数组。我将如何设置查询以响应每个类(class)的类(class)名称和代码,而不仅仅是 course_id?

最佳答案

您需要 create a relationship ClassCourse 模型之间。如果您在模型定义中指定 underscored: true 选项,它将不会使用驼峰式大小写,并且会自动创建 Class.course_id 列,因此您不需要定义它(completed_by_user_id 可能也是如此)。

const Class = sequelize.define('class', {
  class_date: Sequelize.DATE,
  begin_time: Sequelize.TIME,
  end_time: Sequelize.TIME,
  max_capacity: Sequelize.INTEGER,
  is_published: Sequelize.BOOLEAN,
  training_facility_id: Sequelize.INTEGER,
  state_id: Sequelize.INTEGER,
  registration_deadline: Sequelize.DATE,

  // this will be auto-created by the relationship
  // course_id: Sequelize.INTEGER,

  is_report_60_generated: Sequelize.BOOLEAN,
  // you probably want a relationship here as well
  completed_by_user_id: Sequelize.INTEGER
}, {
  timestamps: false,
  freezeTableName: true,

  // use underscored names
  underscored: true,
})

const Course = sequelize.define('course', {
  code: Sequelize.STRING,
  name: Sequelize.STRING
 }, {
  timestamps: false,
  freezeTableName: true,
  underscored: true,
})

根据您的数据模型,似乎每个 Class 都需要一个关联的 Course 具有不同的属性,例如开始时间等,因此您将告诉 Sequelize 每个 belongsTo() 类(class)

// tell Sequelize that once course will be assigned to many classes, and it is required (not null)
Class.belongsTo(Course, { foreignKey: { allowNull: false } })

一旦它们相关联,您就可以使用 include option值以指定要连接到您的主要查询的模型。如果您在关系中使用 as,您也必须在此处指定它。

// do a joined query using "include"
Class.findAll({
  include: [
    {
      model: Course
    }
  ]
})

关于javascript - 如何使用 sequelize 从 2 个表中查询信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40899611/

相关文章:

android - 何时保存应用程序的状态

java - 如何使用FileOutputStream写入数据库

sql - 如何从sql中的所有列创建别名?

sql - 如何索引电话号码?

javascript - 为什么这个 javascript 代码不起作用?

JavaScript:WAITING递归树完成,其中每个递归级别都是一个 API 调用

javascript - 正确使用 Electron

javascript - 如何同时读取一个流并写入多个流?

sql - 在 PostgreSQL 中查找非唯一行的 ID

python-3.x - 值错误 :unsupported format character 'd' (0x64) at index %Id