我正在制作Sails.js我正在尝试在我的播放列表模型中存储一些曲目。
是这样的:
Playlist = {
attributes : {
tracks: {
collection: 'track'
}
}
}
我的问题是,一个播放列表有一个曲目列表,其中曲目有一个特定的顺序。
例如,当我创建一个播放列表:
var tracksIds = [5,2,10];
// Create
Playlist.create({tracks: tracksIds})
// Return =>
Playlist = {
tracks: [2,5,10]
}
// Needed =>
Playlist = {
tracks: [5,2,10]
}
所以我的问题是:如何迫使Sails不按Id订购曲目集合中的记录?
谢谢的!
为了保存订单信息,您需要在某处添加一个order属性。
在纯关系数据库逻辑中,您希望在Playlist和Track之间有一个中间表。首先,因为many<->many关系需要它,其次,存储播放列表中曲目的顺序信息。
如何实现这在帆?文档明确指出这是不可能的:http://sailsjs.org/documentation/concepts/models-and-orm/associations/through-associations
他们建议您自己创建中间模型作为解决方法。
这意味着你有三个模型
- 播放列表
- PlaylistTrack(或PlaylistEntry等,无论你想要什么)
PlaylistTrack模型将与Track和Playlist以及order属性有一个1 ->多关系。像这样:
module.exports = {
attributes: {
playlist: {
model: 'playlist'
},
track: {
model: 'track'
},
order: 'integer'
}
}
您还需要将collection属性添加到Playlist。您可能还需要检查每个播放列表/曲目组合的顺序是否唯一。
现在您可以使用Model.sort()
方法来正确地排序轨道