У меня есть четыре модели:Как удалить атрибуты таблицы?
Category
Video
VideoCategory
VideoSchedule
С помощью этих отношений:
Category.belongsToMany(Video, { through: VideoCategory })
Video.belongsToMany(Category, { through: VideoCategory })
Video.hasOne(VideoSchedule)
VideoSchedule.belongsTo(Video)
Я хочу, чтобы получить список категорий для запланированного в настоящее время видео. Я очень близок, но Sequelize продолжает давать мне атрибуты из сквозного стола, когда все, что я хочу, это Category.id
и Category.name
. Вот мой Sequelize:
Category.findAll({
attributes: ['id', 'name'],
raw: true,
group: 'Category.id',
order: 'Category.name',
include: [
{
model: Video,
attributes: [],
where: { active: true },
through: { attributes: [] },
include: [
{
model:
VideoSchedule,
attributes: [],
where: { site_id: 106 }
}
]
}
]
}).then(function(cats) { console.log(cats); });
Вот пример вывода я получаю:
{ id: 1,
name: 'Comedy',
'Videos.VideoCategory.category_id': 1,
'Videos.VideoCategory.video_id': 962 },
{ id: 2,
name: 'Drama',
'Videos.VideoCategory.category_id': 2,
'Videos.VideoCategory.video_id': 914 }
То, что я действительно хочу, это просто { id: 1, name: 'Comedy' }, { id: 2, name: 'Drama'}
. Как я могу избавиться от дополнительных атрибутов из сквозной таблицы? Я пробовал использовать through: { attributes: [] }
в своем заявлении include
, но безрезультатно. Просто чтобы быть полным, вот SQL заявление генерируется Sequelize:
SELECT
`Category`.`id`,
`Category`.`name`,
`Videos.VideoCategory`.`category_id` AS `Videos.VideoCategory.category_id`,
`Videos.VideoCategory`.`video_id` AS `Videos.VideoCategory.video_id`
FROM
`categories` AS `Category`
INNER JOIN (`video_categories` AS `Videos.VideoCategory`
INNER JOIN `videos` AS `Videos` ON `Videos`.`id` = `Videos.VideoCategory`.`video_id`)
ON `Category`.`id` = `Videos.VideoCategory`.`category_id`
AND `Videos`.`active` = true
INNER JOIN `video_schedules` AS `Videos.VideoSchedule`
ON `Videos`.`id` = `Videos.VideoSchedule`.`video_id`
AND `Videos.VideoSchedule`.`site_id` = 106
GROUP BY Category.id
ORDER BY Category.name;
Любое понимание будет оценен по достоинству!