Sequelize ORM - включить два отношения как одно родительское свойство - PullRequest
0 голосов
/ 03 октября 2019

У меня есть схема с тремя моделями: Школа , Учитель и Ученик .
В школе может быть несколько учителей и несколькоученики.

Я могу получить список schools с Sequelize следующим образом:

return School.findAll({
    include: [
        { model: Teacher },
        { model: Student },
    ],
});

Что приводит к JSON, как это:

[{
    id: 'dc85fe6a-c009-4055-9852-e2c3c0b37e9b,
    teachers: [ ... ],
    students: [ ... ]
}]

Теперь я хочу, чтобыJSON также должен включать свойство с именем people, которое включает в себя teachers и students.
сеанса. Другими словами, JSON должен выглядеть следующим образом:

[{
    id: 'dc85fe6a-c009-4055-9852-e2c3c0b37e9b,
    people: [ ... ], // Should contain teachers and students.
    teachers: [ ... ],
    students: [ ... ]
}]

Как я могу "включить«Несколько отношений в одно свойство, как это?
Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 03 октября 2019

Я не думаю, что вы можете достичь этого, используя sequelize. Тем не менее, ваш вариант использования, как правило, будет работать лучше, используя шаблон наследования. Подумайте об этом, что общего между студентами и учителем? Они оба люди, поэтому любой атрибут, который есть у человека, является общим для обоих.

Вот что я хотел бы сделать:

  • Иметь модель под названием Person,содержащий все общие свойства (имя, фамилия, дата рождения ...)
  • Имеют две другие модели Student и Teacher, содержащие специфические свойства
  • Определить one to oneотношения между Student / Teacher и Person. Будьте осторожны, вы можете определить его только одним способом (Student - это Person, но Person не всегда Student)
  • Определите отношение one to many из Schoolна Person.

Таким образом, вы сможете достичь того, что вы хотите, выполнив следующее:

return School.findAll({
    include: [
        {
            model: Person,
            include: [
                { model: Teacher },
                { model: Student },
            ]
        },
    ],
});

И, imho, я верю, что эта модель будетболее уместно в отношении нормализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...