Mysql Sequelize关联:在JSON响应中包含实体

Mysql Sequelize关联:在JSON响应中包含实体,mysql,json,node.js,sequelize.js,Mysql,Json,Node.js,Sequelize.js,我有三张表:视频剪辑、播放列表和视频剪辑播放列表地图 Videoclips表的主键是int id,字符串是videoId VideoclipPlaylist映射的外键为PlayID,指向播放列表表中的id;外键为videoclipId,指向videoclips表中的videoId 我想返回一个包含所有播放列表的JSON,并为每个播放列表返回一个包含视频剪辑的数组 我不知道如何进行续集关联来实现这一点 let Videoclip = sequelize.define('videoclip',{

我有三张表:视频剪辑播放列表视频剪辑播放列表地图

  • Videoclips表的主键是int id,字符串是videoId
  • VideoclipPlaylist映射的外键为PlayID,指向播放列表表中的id;外键为videoclipId,指向videoclips表中的videoId
我想返回一个包含所有播放列表的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使用videoId字段作为关系的目标键。默认情况下,在belongsTo关联中,模型的主键用作目标键。您需要在关联中使用targetKey选项

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