我们的需求是需要在一个歌单(playList)下展示多首歌,比如我们现在有三首歌song,它们都有一个id,我们最初的办法是在playList里存一个songs然后里面分别存歌曲的id,但是如果我需要拿到每首歌的name,我还得对songs里面对应的id再分别取发送请求,这时候如果有一百首歌的话,那么它就会先对playList发送一次请求拿到songs的id,然后再分别对每个id发请求也就是需要请求101次,这就是只存id的缺陷
解决方法:使用数据关联
在leancloud里使用一对多关系的数据关联
var Song = AV.Object.extend('Song')
var song = new Song()
song.set('name','111')
var Playlist = AV.Object.extend('playList')
var playlist = new Playlist()
playlist.set('name','专辑1')
//只需要添加下面一行,就可以让song属于playlist,也就是前面是子元素后面是父元素
song.set('dependent',playlist)
song.save()


运行上面代码后发现Song里面新添加了一个name是111的歌曲,这首歌曲多了一个dependent而它的id就是playList的id
现在这种方案就是一个playlist里面有一个id,然后有一个name,之后song里面的歌曲都有自己的id和name,然后还有一个dependent存的是playlist的id,所以现在只需要发一个请求拿到playlist,然后根据playlist的id再发一次请求就能找到song下面所有dependent为playlist的id的所有歌曲
取消关联状态,从当前数据下删除子数据
只需要调用更新api,把dependent设置为null
var song = AV.Object.createWithoutData('Song', songId);
// 修改属性
song.set('id',songId)
song.set('dependent', null);
// 保存到云端
return song.save()
网友评论