Как указано соотношение
ПОЛЬЗОВАТЕЛЬ (м) ------ (n) ИНСТРУМЕНТЫ (1) ------ (1 ) УЧИТЕЛЬ
Итак
- У каждого отдельного инструмента есть учитель, и каждый учитель обучает инструменту.
- Каждый пользователь может выучить несколько инструментов и каждый инструмент может изучать несколько пользователей.
На основании этих соотношений между USER
и TEACHER
следует
USER (m) - ---- (n) УЧИТЕЛЬ
- Каждый пользователь может учить инструмент у нескольких учителей.
- Каждый учитель может обучать инструмент многопользовательским.
Ваш исходный вывод был
[{
"name": "John Doe",
"id": 1,
"Instruments": [{ // 1:M and N:M association
"name": "Scissor",
"id": 1,
"userId": 1,
"Teacher": { // 1:1 association
"name": "Jimi Hendrix"
}
}]
}]
Что вы ожидаете, если есть несколько инструментов? как в случае с
[{
"name": "John Doe",
"id": 1,
"Instruments": [{ // 1:M and N:M association
"name": "Scissor",
"id": 1,
"userId": 1,
"Teacher": { // 1:1 association
"name": "Jimi Hendrix"
}
},
{
"name": "Guitar",
"id": 2,
"userId": 1,
"Teacher": {
"name": "john wick"
}
}]
}]
Если вы наберете instrument
, то вы всегда можете опубликовать обработку своего результата после получения из sequelize.
const result = [{
"name": "John Doe",
"id": 1,
"Instruments": [{ // 1:M and N:M association
"name": "Scissor",
"id": 1,
"userId": 1,
"Teacher": { // 1:1 association
"name": "Jimi Hendrix"
}
},
{
"name": "Guitar",
"id": 2,
"userId": 1,
"Teacher": {
"name": "john wick"
}
}]
}]
console.log(result.map(function(obj) {
return obj.Instruments.map(function(iObj) {
const teacher = iObj.Teacher;
delete iObj.Teacher;
return {
name: obj.name,
id: obj.id,
Instrument: iObj,
Teacher: teacher
}
});
}).flat())