【问题标题】:Sequelize associations: include entity in JSON response续集关联:在 JSON 响应中包含实体
【发布时间】:2018-06-07 11:37:05
【问题描述】:

我有三个表:videoclipsplaylistsvideoclipPlaylistMap

  • Videoclips 表有一个 int id 作为主键,一个 videoId 作为一个字符串。
  • VideoclipPlaylist 映射有一个 playlistId 作为指向播放列表表中的 id 的外键和一个 videoclipId 作为指向 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

【问题讨论】:

    标签: mysql json node.js sequelize.js


    【解决方案1】:

    您需要告诉 Sequelize 使用 videoId 字段作为关系的目标键。默认情况下,在 belongsTo 关联中,模型的主键用作目标键。您需要在关联中使用 targetKey 选项。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-10
      • 2020-02-08
      • 1970-01-01
      • 1970-01-01
      • 2014-10-07
      • 1970-01-01
      • 1970-01-01
      • 2015-03-26
      相关资源
      最近更新 更多