Я начинающий Sequelize и концепция ORM в целом. Я успешно преобразовал свой запрос в функцию Sequelize findAll (), но он возвращает нежелательный результат. Запрос PostgreSQL работает и отлично возвращает результат.
Таблицы с отношениями:
- писателей (writerId PK, writerName)
- сообщений (postId PK, postTitle, postDescription)
- skillmatrix (skillmatrixId PK, writerId FK, postId FK, writerSkill)
Мой запрос:
SELECT writers."writerName", posts."postTitle", posts."postDescription",
skillmatrix.*
FROM writers
INNER JOIN skillmatrix
ON writers."writerId" = skillmatrix."writerId"
INNER JOIN posts
ON skillmatrix."postId" = posts."postId"
ORDER BY writers."writerId", posts."postId"
Вывод из SQL-запроса:
![enter image description here](https://i.stack.imgur.com/iQ1Al.png)
Отношения в секвелизе:
db.skillmatrix.hasMany(db.posts,{foreignKey: 'postId'});
db.skillmatrix.hasMany(db.writers,{foreignKey: 'writerId'});
Метод findAll () в Sequelize:
exports.findAll = (req, res, next) => {
SkillMatrix.findAll({
include: [
{
model: Writer,
required: true
},
{
model: Post,
required: true
}
],
order:[
['"writerId"', 'ASC'],
['"postId"', 'ASC']
]
})
.then(skillmatrix => {
res.status(200).json(skillmatrix);
})
.catch(err => {
console.log(err);
res.status(500).json({msg: "error", details: err});
});
};
вывод JSON из Sequelize:
{
"skillMatrixId": 1,
"writerId": 1,
"postId": 1,
"writerSkill": "None",
"writers": [
{
"writerId": 1,
"writerName": "Writer1"
}
],
"posts": [
{
"postId": 1,
"postTitle": "Post1"
"postDescription": "This is Post1"
}
]
},
{
"skillMatrixId": 2,
"writerId": 1,
"postId": 2,
"writerSkill": "SEO",
"writers": [
{
"writerId": 2,
"writerName": "Writer2" //This is unexpected
}
],
"posts": [
{
"postId": 2,
"postTitle": "Post2",
"postDescription": "This is Post2"
}
]
},
{
"skillMatrixId": 3
"writerId": 1,
"postId": 3,
"writerSkill": "Proofread"
"writers": [
{
"writerId": 3, //Unexpected
"writerName": "Writer3"
}
],
"posts": [
{
"postId": 3,
"postTitle": "Post3",
"postDescription": "This is Post3"
}
]
}...
Пожалуйста, дайте мне знать, что я делаю не так. Также предложите мне несколько хороших ресурсов, где я могу изучить это глубоко. Спасибо.
EDIT:
Секвелизировать запрос журнала:
SELECT "skillmatrix"."skillMatrixId",
"skillmatrix"."writerId", "skillmatrix"."postId",
"skillmatrix"."writerSkill",
"writers"."writerId" AS "writers"."writerId",
"writers"."writerName" AS "writers"."writerName",
"posts"."postId" AS "posts"."postId",
"posts"."postTitle" AS "posts"."postTitle",
"posts"."postDescription" AS "posts"."postDescription",
"posts"."writerId" AS "posts"."writerId"
FROM "skillmatrix" AS "skillmatrix"
INNER JOIN "writers" AS "writers" ON "skillmatrix"."skillMatrixId" =
"writers"."writerId"
INNER JOIN "posts" AS "posts" ON "skillmatrix"."skillMatrixId" =
"posts"."postId"
ORDER BY "skillmatrix"."writerId" ASC, "skillmatrix"."postId" ASC