【问题标题】:Select from multiple tables Sequelize从多个表中选择 Sequelize
【发布时间】:2017-07-20 04:28:19
【问题描述】:

我目前正在使用 sequelize 开发一个系统,我需要一个查询来从多个表中获取数据,如下所示:

Select Courses.id, Rooms.DisplayLabel, Periods.DisplayName, Subjects.Name 
from Rooms, Periods,Subjects, Courses
where Periods.id = Courses.PeriodId  and Rooms.id=Courses.RoomId 
and Subjects.id = Courses.SubjectId and Courses.id = 2

Rooms、Subjects 和 Periods 是目录,而 course 是我保存所有键的表。 Sequelize 的定义是这样的:

module.exports = function(sequelize, DataTypes) {

  var Course = sequelize.define('Course', {
      Scholarship: {
        type: DataTypes.STRING(30)
      },
      Level: {
        type: DataTypes.INTEGER(2),
      },
      CourseType: {
        type: DataTypes.STRING(30),
      },
      RecordStatus: {
        type: DataTypes.BOOLEAN,
        default: true
      },
      DeletedAt: {
        type: DataTypes.DATE
      }
    },
    {
      associate: function(models){
        Course.belongsTo(models.School, {foreignKey: {unique: true}});
        Course.belongsTo(models.Person, {foreignKey: {unique: true}});
        Course.belongsTo(models.Period, {foreignKey: {unique: true}});
        Course.belongsTo(models.Schedule, {foreignKey: {unique: true}});
        Course.belongsTo(models.Room, {foreignKey: {unique: true}});
        Course.belongsTo(models.Subject, {foreignKey: {unique: true}});

        Course.belongsTo(models.user, { as: 'CreatedBy' });
        Course.belongsTo(models.user, { as: 'UpdateBy' });
        Course.belongsTo(models.user, { as: 'DeleteBy' });
      }
    }
  );

  return Course;
};

到目前为止,我在控制器上得到的唯一查询是:

exports.courseFields = function(req, res) {

    db.Course.find({
        where: {id: req.params.PeriodIdF},
        attributes: ['id'], 
        include: [{model:db.Room, attributes:['DisplayLabel']}]})
    .then(function(courses) {
            return res.json(courses);
        })
        .catch(function(err) {
            return res.render('error', {
                error: err,
                status: 500
            });
        });
};

我的问题是,如何包含其他表格和字段?我对 sequelize 的工作原理感到困惑。

【问题讨论】:

    标签: mysql node.js sequelize.js


    【解决方案1】:

    更新您的包含块

    include: [
                 {model:db.Room, attributes:['DisplayLabel']},
                 {model:db.Periods, attributes:['DisplayLabel']},
                 {model:db.Subjects, attributes:['Name']}
    
           ]
    

    【讨论】:

    • 谢谢,成功了。只是一个附加问题,如何使用关联的 id 和外键创建一个 Contrain 键。假设使用 unique : true 它会创建,但似乎只给该字段一个不重复的限制。
    猜你喜欢
    • 1970-01-01
    • 2018-03-30
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    • 2011-02-16
    • 2021-11-08
    • 2014-01-12
    相关资源
    最近更新 更多