不要在Sails.js的collection属性中按id记录排序

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

本文关键字:id 记录 排序 属性 collection Sails js      更新时间:2023-09-26

我正在制作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()方法来正确地排序轨道