#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"
});