левое внешнее соединение с пользовательским ПРИ условии продолжения

#node.js #postgresql #sequelize.js #sequelize-cli

#node.js #postgresql #sequelize.js #продолжение-cli

Вопрос:

Я использую sequelize, DB в качестве Postgres

таблица моих учеников в виде столбцов (id, name, dept_id).

таблица моих отделов в виде столбцов (id, dname, hod)

Моя ассоциация пока выглядит так

 Student.hasOne(models.Department, {
    foreignKey: 'id',
    as : "role"
  });
  

Я хочу получить ученика с определенным идентификатором и данными его отдела. Используя sequelize, я написал запрос, подобный приведенному ниже

 Student.findOne({
    where: { id: id },
    include: [{
        model: Department,
        as:"dept"
    }],
})
  

К вашему сведению, с помощью этой опции includes в findOne генерируется запрос внешнего соединения по левому краю, как показано ниже

 SELECT "Student"."id", "Student"."name", "Student"."dept_id", "dept"."id" AS "dept.id", "dept"."dname" AS "dept.dname", "dept"."hod" AS "dept.hod", FROM "students" AS "Student" 
LEFT OUTER JOIN "departments" AS "dept" 
ON "Student"."id" = "dept"."id" 
WHERE "Student"."id" = 1 
LIMIT 1;
  

Мой ожидаемый результат должен быть

 {
    id: 1,
    name: "bod",
    dept_id: 4,
    dept: {
        id: 4,
        dname: "xyz",
        hod: "x"
    }
}
  

но я получаю

 {
    id: 1,
    name: "bod",
    dept_id: 4,
    dept: {
        id: 1,
        dname: "abc",
        hod: "a"
    }
}
  

итак, как мне изменить условие на

 ON "Student"."dept_id" = "dept"."id"
  

заранее благодарю вас

Ответ №1:

 Student.hasOne(models.Department, {
    foreignKey: 'dept_id', // fixed
    as : "role"
  });