Можете ли вы скрыть вывод из (не сгенерированной автоматически) таблицы соединений, используя Sequelize.js? - PullRequest
0 голосов
/ 03 сентября 2018

Я использую фреймворк 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?

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

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

enter image description here

Итак, вкратце: в сиквелизе для подхода Б. такой функции нет.

0 голосов
/ 03 сентября 2018

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

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

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

...