首页 > 解决方案 > 在 sequelize 中加入表

问题描述

我正在尝试通过加入 4 个表从数据库中获取数据。由于续集对我来说是新的,我不能请任何人帮我这样做。这是必须在 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 

标签: joinsequelize.jsquery-builder

解决方案


您需要先定义Model,然后使用它来查询Instance模型(或 s 数组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'],
    },
  ],
});

推荐阅读