2017-12-26 3 views
0

에 법인을 포함한다 : 비디오 클립을, 재생 목록videoclipPlaylistMap.Sequelize 협회는 : 나는 세 개의 테이블이 JSON 응답

  • 비디오 클립 테이블 기본 키로서 INT ID 및 문자열로 videoId가있다.
  • VideoclipPlaylist지도는 재생 목록 테이블에서 ID에 대한 외래 키 포인팅으로 playlistId 및 비디오 클립 테이블에서 videoId가을 가리키는 외래 키와 같은 videoclipId 있습니다.

모든 재생 목록을 포함하는 JSON을 반환하고 각 재생 목록에 포함 된 비디오 클립의 배열을 반환하고 싶습니다.

나는 이것을 달성하기 위해 sequelize associations을하는 방법을 알 수 없다.

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

을 그리고 대신에 videoclipPlaylistMaps.videoclip의 :

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'}); 

지금이 가입의 실행 것 때문이다. idvideoclipPlaylistMaps.videoclip으로 가야합니다. videoId

답변

1

관계의 대상 키로 videoId 필드를 사용하려면 Sequelize에 알려야합니다. 기본적으로 belongsTo 연관에서 모델의 기본 키가 대상 키로 사용됩니다. 연결에서 targetKey 옵션을 사용해야합니다.

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

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

관련 문제