У меня есть две модели с many-to-many
ассоциацией между ними.
JobPosts
----------------
id |
Student
----------------
id |
JobPosts_Applied
------------------
id | StudentId | JobPostId
Ниже определена ассоциация.
JobPosts.belongsToMany(models.Student, {
through: "JobPosts_Applied",
as: "students"
});
Student.belongsToMany(models.JobPosts, {
through: 'JobPosts_Applied'
});
Я пытаюсь получить все оглушения вместе с JobPost
. Но students
должно быть отсортировано по createdAt
из applied
.
const post = await JobPosts.findAll({
limit: 5,
include: [
{
model: Student,
through: {
model: JobPosts_Applied,
as: 'applied',
attributes: ['createdAt']
},
as: 'students',
attributes: ['name']
},
],
order: [
['createdAt', 'DESC'],
['applied', 'createdAt', 'DESC']
],
logging: console.log
});
Но это не работает, не сортируется массив students
на основании JobPosts_Applied.createdAt
.
Создает этот запрос:
SELECT "JobPosts".*, "students"."id" AS "students.id", "students"."name" AS "students.name", "students->applied"."createdAt" AS "students.applied.createdAt", "students->applied"."updatedAt" AS "students.applied.updatedAt", "students->applied"."StudentId" AS "students.applied.StudentId", "students->applied"."JobPostId" AS "students.applied.JobPostId"
FROM (
SELECT "JobPosts"."id", "JobPosts"."postedby", "JobPosts"."location", "JobPosts"."details", "JobPosts"."image", "JobPosts"."contact", "JobPosts"."video", "JobPosts"."interview_date", "JobPosts"."services", "JobPosts"."comment_count", "JobPosts"."is_authenticated", "JobPosts"."visible_to_all", "JobPosts"."no_of_shares", "JobPosts"."no_of_applications", "JobPosts"."createdAt", "JobPosts"."updatedAt", "JobPosts"."InstituteId", "JobPosts"."EmployerId", "JobPosts"."MemberId"
FROM "JobPosts" AS "JobPosts"
ORDER BY "JobPosts"."createdAt" DESC, "JobPosts"."applied"."createdAt" DESC
LIMIT 5) AS "JobPosts"
LEFT OUTER
JOIN ("JobPosts_Applied" AS "students->applied"
INNER JOIN "Students" AS "students" ON "students"."id" = "students->applied"."StudentId") ON "JobPosts"."id" = "students->applied"."JobPostId"
ORDER BY "JobPosts"."createdAt" DESC, "JobPosts"."applied""createdAt" DESC;
Я также пытался передать order: [['createdAt', 'DESC']]
внутри включенной модели JobPosts_Applied
, внутри through
. Но он также не возвращает отсортированный результат.
Обновление
[
{
"id": 123,
"description": "some desc",
"students": [
{
"name": "bill",
"applied": {
"createdAt": "10-09-2019 09:10:22"
}
},
{
"name": "michelle",
"applied": {
"createdAt": "10-29-2019 09:10:22"
}
}
...
]
}
},
{
"id": 1233,
"description": "some desc",
"students": [
{
"name": "mike",
"applied": {
"createdAt": "10-10-2019 09:10:22"
}
},
{
"name": "ruby",
"applied": {
"createdAt": "10-20-2019 09:10:22"
}
}
...
]
}
...
]
Что я хочу, чтобы массив students
был отсортирован в порядке убывания по дате они applied(createdAt)
для работы.
Таким образом, последний студент, подавший заявку на работу, занимает первое место в массиве students
.