在 sequelize 中连接表

标签 join sequelize.js query-builder

我试图通过加入 4 个表从数据库中获取数据。由于 Sequelize 对我来说是新的,我不能请任何人帮助我做到这一点。这是必须在 ORM sequelize 中完成的查询。

select p.page_id,p.page_title,pt.page_type_id,pt.page_type_name,e.exam_id,e.exam_name,m.menu_id,m.name,p.is_published,p.created_date,p.status_id from el_pages as p join el_page_types as pt on pt.page_type_id=p.page_type_id join el_exams as e on e.exam_id=p.exam_id join el_menus as m on m.menu_id=p.menu_id 

最佳答案

您需要首先定义 Model,然后使用它来查询模型的 Instance(或 Instance 数组)。列名是从模型定义中推断出来的,或者您可以使用 attributes 指定它们。使用 include 连接其他表。

模型

/* Define `Models` for Page, PageType, Exam, and Menu and 
   create associations/relationships between them */

const PageType = sequelize.define(
  'page_type',
  { /* define fields */ },
  { /* define options */ }
);
module.exports = PageType;

const Exam = sequelize.define(
  'exam',
  { /* define fields */ },
  { /* define options */ }
);
module.exports = Exam;

const Menu = sequelize.define(
  'menu',
  { /* define fields */ },
  { /* define options */ }
);
module.exports = Menu;

// ...add additional Models

const Page = sequelize.define(
  'page',
  { /* define fields */ },
  { /* define options */ }
);
// add relationships to other models
Page.associate = (models) => {
  Page.belongsTo(models.PageType);
  Page.hasMany(models.Exam);
  Page.hasMany(models.Menu);
  // ...additional relationships
};
module.exports = Page;

查询
// Query using the following syntax
const pages = await Page.findAll({
  attributes : ['page_id', 'page_title', 'is_published', 'created_date', 'status_id'],
  include: [
    {
      model: PageType,
      attributes : ['page_type_name'],
    },
    {
      model: Exam,
      attributes : ['exam_id', 'exam_name'],
    },
    {
      model: Menu,
      attributes : ['name'],
    },
  ],
});

关于在 sequelize 中连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52484319/

相关文章:

postgresql - PostgreSQL 中 INNER JOIN 查询出现“无主键”错误

MySQL - 在连接时引用伪表内的外部表

node.js - 如何使用 Sequelize 为 node.js 和 Heroku Postgres 编写同步和迁移操作脚本?

sequelize.js - Sequelize - 包含带有字符串名称的嵌套属性/关系

mysql - Joomla mysql 查询中表名开头的 #__ 是什么意思?

php - 如何对 PHP MySQL JOIN 结果进行分组?

mysql - 如何使用sequelize在nodejs中更新

mysql - 将日期时间值与 null 进行比较时,日期时间值不正确

php - 如何在 Laravel 中编写这个复杂的查询

带有 SUM 和 3 个表的 MySQL JOIN