Sequelize ассоциаций: включить сущность в ответ JSON

0

У меня три таблицы: видеоклипы, плейлисты и видеороликиPlaylistMap.

  • В таблице Videoclips есть int id как первичный ключ, а videoId - как строка.
  • Карта VideoclipPlaylist имеет playlistId как внешний ключ, указывающий на идентификатор из таблицы плейлистов и видеоролик в качестве внешнего ключа, который указывает на видеоизображение из таблицы видеороликов.

Я хочу вернуть JSON, содержащий все плейлисты, и для каждого плейлиста - массив содержащихся видеороликов.

Я не могу понять, как сделать сиквел-ассоциации для достижения этого.

let Videoclip = sequelize.define('videoclip',{
    title: Sequelize.STRING,
    videoId: Sequelize.STRING,
    thumbnail: Sequelize.STRING,
    channelTitle: Sequelize.STRING,
    duration: Sequelize.DOUBLE,
    viewCount: Sequelize.INTEGER
});

let Playlist = sequelize.define('playlist', {
    name: Sequelize.STRING,
    userId: Sequelize.INTEGER,
    tagList: Sequelize.STRING
});

let VideoclipPlaylistMap = sequelize.define('videoclipPlaylistMap', {
    videoclipId: Sequelize.STRING,
    playlistId: Sequelize.INTEGER
});

User.hasMany(Playlist, {foreignKey: 'userId'});
Playlist.belongsTo(User, {foreignKey: 'userId'});
Playlist.hasMany(VideoclipPlaylistMap, {foreignKey: 'playlistId'});
VideoclipPlaylistMap.belongsTo(Videoclip, {foreignKey: 'videoclipId'});

Как и сейчас, это выполнение этого соединения:

LEFT OUTER JOIN 'videoclips' AS 'videoclipPlaylistMaps.videoclip' ON 'videoclipPlaylistMaps'.'videoclipId' = 'videoclipPlaylistMaps.videoclip'.'id'

И вместо этого videoclipPlaylistMaps.videoclip. id он должен перейти в videoclipPlaylistMaps.videoclip. videoId

Теги:
sequelize.js

1 ответ

1
Лучший ответ

Вы должны сказать Sequelize, чтобы использовать поле videoId в качестве целевого ключа для отношений. По умолчанию в атрибуте belongsTo используется первичный ключ модели в качестве целевого ключа. Вы должны использовать опцию targetKey в ассоциации.

    VideoclipPlaylistMap.belongsTo(Videoclip, { foreignKey: 'videoclipId', targetKey: 'videoId' });

http://docs.sequelizejs.com/manual/tutorial/associations.html#target-keys

Ещё вопросы

Сообщество Overcoder
Наверх
Меню