Можно ли с помощью Sequelize.js скрыть вывод из таблицы соединения (не автоматически созданной)?

Я использую бэкэнд-фреймворк Feathersjs с Sequelize как ORM. Использование таблиц соединения Sequelize для отношений n: m может быть сгенерировано «автоматически» (далее «Подход A») с ассоциацией belongsToMany, однако я последовал также рекомендованному альтернативному подходу («Подход B»), то есть явному определению таблицы соединения. с 2 belongsTo ассоциациями и с использованием hasMany ассоциаций из двух таблиц, которые вы хотите объединить в объединенную таблицу.

Это нормально работает. Однако мой результат выглядит так:

{
    "id": 1,
    "user_id": 2,
    "group_id": 1,
    "Venues": [
        {
            "id": 1,
            "capacity": "400",
            "venue_name": "Club Lotte",
            "venue_description": "Club in Rotterdam",
            "EmployeeVenues": {
                "employee_id": 1,
                "venue_id": 1
            }
        },
        {
            "id": 2,
            "capacity": "400",
            "venue_name": "Club Dino",
            "venue_description": "Club in Rotterdam",
            "EmployeeVenues": {
                "employee_id": 1,
                "venue_id": 2
            }
        }
    ]
} 

И хотелось бы, чтобы это выглядело так:

{
    "id": 1,
    "user_id": 2,
    "group_id": 1,
    "Venues": [
        {
            "id": 1,
            "capacity": "400",
            "venue_name": "Club Lotte",
            "venue_description": "Club in Rotterdam"
        },
        {
            "id": 2,
            "capacity": "400",
            "venue_name": "Club Dino",
            "venue_description": "Club in Rotterdam"
        }
    ]
}

При использовании подхода A ту же проблему можно решить с помощью through: { attributes: [] } в запросе. Можно ли этого также достичь с помощью подхода B?


person musicformellons    schedule 03.09.2018    source источник
comment
Вы пробовали joinTableAttributes: []?   -  person Ankh    schedule 03.09.2018


Ответы (2)


Нужно использовать атрибуты

Model.findAll({
    attributes: ['foo'],
    include: {
        attributes: ['bar'],
        model: JoinModelName,
    },
});

http://docs.sequelizejs.com/manual/tutorial/querying.html

person Uladzislau Vavilau    schedule 03.09.2018
comment
Перепроверил, думаю пока толком не работает. Завтра проверю. - person musicformellons; 03.09.2018
comment
Проверил: не возможно. Используя ваш метод, вам все равно придется отображать 1 атрибут объединенной таблицы, поэтому вы эффективно сохраняете этот дополнительный слой в своем выводе. - person musicformellons; 07.09.2018

Подход B использует промежуточную модель и использует belongsTo. В sequelize нет функций, которые поддерживают исключение выходных данных промежуточной модели (таблицы соединений). Я просмотрел код продолжения и не нашел «такого». Видео с инструкциями Эрика Каца (я нашел 3 из них на m: n с sequelize) также не показывают такого метода. Он просто обрабатывает вывод с помощью операторов forEach, чтобы получить желаемый результат. Смотрите внизу этой картинки.

введите здесь описание изображения

Вкратце: в продолжении Подхода B такой функции нет.

person musicformellons    schedule 07.09.2018