2016-08-13 4 views
1

У меня есть четыре модели:Как удалить атрибуты таблицы?

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; 

Любое понимание будет оценен по достоинству!

ответ

Смежные вопросы