【问题标题】:Sequelize multiple joins for fetching dataSequelize 多个连接以获取数据
【发布时间】:2021-10-23 17:34:54
【问题描述】:

我正在使用 Sequelize 和 ExpressJS 开发一个 CRUD 应用程序,该应用程序具有以下表格:

Parents Students ParentStudents
id id id
name name idParent
idStudent

我想查询 Parents 表,并通过idParent上的students和ParentStudents之间的左连接创建students键;

我想通过以下方式获取数据:

{
  "data":[
    {
      "name":"nameParent2",
      "students":[
        {
          "name":"Student1"
        },
        {
          "name":"Student2"
        }
      ]
    },
    {
      "name":"nameParent2",
      "students":[
        {
          "name":"Student1"
        },
        {
          "name":"Student2"
        }
      ]
    }
  ]
}

我尝试了类似的方法,但错误并提供来自 ParentStudents 的数据:

models.parents.findAll({
    include: [{
        model: models.parentStudents
    }]
}).then(data => {
    res.json({
        message: "Hello from server!!!",
        data: data
    });
});

这样就无法在学生和家长学生之间建立关联。 (students 与 parentStudents 没有关联!

models.parents.findAll({
    include: [{
        model: models.parentStudents,
        include: [{
            model: models.students
        }]
    }]
}).then(data => {
    res.json({
        message: "Hello from server!!!",
        data: data
    });
});

我的关系是这样完成的:

db.parents.hasMany(db.parentStudents);
db.students.hasMany(db.parentStudents);

我也试过Many-to-Many,但还是不行:

db.students.belongsToMany(db.parents, { through: db.parentStudents });
db.parents.belongsToMany(db.students, { through: db.parentStudents });

有人知道如何做到这一点吗?

【问题讨论】:

    标签: mysql node.js database express sequelize.js


    【解决方案1】:

    一种解决方法是:

    let parents = await models.parents.findAll();
    
    for (let parent of parents) {
      let idParent = parent.dataValues.id;
      let students = await models.sequelize.query(`
        SELECT * FROM students s
        LEFT JOIN parentStudents ps
        ON s.id = ps.studentId 
        WHERE ps.parentId =${idParent};
      `);
    
      parent.dataValues['students'] = students;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多