不要按带有 Sails.js 的集合属性中的 id 记录排序

Don't order by id record in collection attribute with Sails.js

我正在处理 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 对轨道集合中的记录进行排序?

谢谢!

要保存订单信息,您需要在某处设置订单属性。

在纯关系数据库逻辑中,您需要播放列表和曲目之间的中间 table。首先,因为 many<->many 关系需要它,其次,在播放列表中存储曲目的顺序信息。

如何在 Sails 中实现这个?那么文档指定这是不可能的: http://sailsjs.org/documentation/concepts/models-and-orm/associations/through-associations

他们建议您自己创建中间模型作为解决方法。

这意味着你有三个模型

  • 跟踪
  • 播放列表
  • PlaylistTrack(或 PlaylistEntry 等,任何你想要的)

PlaylistTrack 模型将与 Track 和 Playlist 以及 order 属性具有一对多关系。像这样:

module.exports = {
  attributes: {
    playlist: {
      model: 'playlist'
    },
    track: {
      model: 'track'
    },
    order: 'integer'
  }
}   

您还需要将 collection 属性添加到播放列表。您可能还想检查每个 playlist/track 组合的顺序是否也是唯一的。

现在您可以使用 Model.sort() 方法正确排序曲目