Sails 在两个模型中插入相同的对象
Sails insert same object in two models
是否可以在两个模型中插入两个相等的对象??
我创建了两个模型 Playlist 和 Song,我创建了一个 song1 和两个播放列表:playlist1 和 playlist2;我希望 playlist1 有 song1 和 playlist2 有相同的歌曲 (song1)。
但是当我关联播放列表1中的歌曲1和播放列表2中的歌曲1时,播放列表1中的关联消失了。
1对N的关系,我试过N对N的关系,但是解不出来
有人能帮帮我吗?? :(
抱歉,我的问题是在控制器中我有主模型并使用两个模型。
主要型号:
--- Playlist.js ---
module.exports = {
attributes: {
name: {
type: 'string',
required: true,
unique: true
},
// Associations
tablets_playlists: {
collection: 'Tablet',
via: 'lista_tablet'
},
songs_playlist: {
collection: 'Song',
via: 'song'
}
}
};
其他型号:
--- Song.js ---
module.exports = {
attributes: {
group: {
type: 'string',
required: true,
unique: true
},
song: {
type: 'string'
},
// Association
song: {
collection: 'Playlist',
via: 'songs_playlist'
}
}
};
--- Tablet.js ---
module.exports = {
attributes: {
MAC: {
type: 'string',
required: true,
unique: true
},
// Associations
lista_tablet: {
collection: 'Playlist',
via: 'tablets_playlists'
}
};
当我在我的渲染视图中将歌曲与播放列表或平板电脑与播放列表相关联时,不会出现。但如果关系是 1 到 N,它就会出现。当我关联两次同一首歌时,服务器崩溃,我认为这是因为在bbdd中有或者它试图添加两个equals对象。
这是我将平板电脑与播放列表相关联的方法,类似于歌曲(我之前发布过)。
associateTabletToPlaylist: function(req,res,next){
var tablet_id = req.param('tablet_id');
var playlist_id = req.param('playlist_id');
Playlist.findOne(playlist_id, function foundPlaylist(err, playlist) {
if (err) return next(err);
if (!playlist) return next();
playlist.tablets_playlists.add(tablet_id);
playlist.save(function createAssociation(err, saved) {
if (err) res.redirect('/playlist/associateTablet/');
res.redirect('/playlist/show/' + playlist_id);
});
});
}
这是 PlaylistController 中要显示、呈现视图的代码:
// render the profile view (e.g. /playlist/show/.ejs)
show: function(req, res, next) {
Playlist.findOne(req.param('id'), function foundPlaylist(err, playlist) {
if (err) return next(err);
if (!playlist) return next();
Tablet.find({'listas_reproduccion':playlist.id},function foundTablets(err, tablets) {
if (err) return next(err);
if (!tablets) return next();
Song.find({'song':playlist.id}, function foundSongs(err, songs) {
if (err) return next(err);
if (!songs) return next();
res.view({
songs: songs,
tablets: tablets,
playlist: playlist
});
});
});
});
},
看起来你有一对一的关系,但你需要多对多。
歌曲有很多播放列表,播放列表有很多歌曲。您必须通过属性提供:
歌曲模型:
module.exports = {
attributes: {
name:'STRING',
// Add a reference to Playlists
playlists: {
collection: 'playlists',
via: 'songs'
}
}
}
播放列表模型:
module.exports = {
attributes: {
name:'STRING',
// Add a reference to Songs
songs: {
collection: 'songs',
via: 'playlists'
}
}
}
是否可以在两个模型中插入两个相等的对象?? 我创建了两个模型 Playlist 和 Song,我创建了一个 song1 和两个播放列表:playlist1 和 playlist2;我希望 playlist1 有 song1 和 playlist2 有相同的歌曲 (song1)。
但是当我关联播放列表1中的歌曲1和播放列表2中的歌曲1时,播放列表1中的关联消失了。 1对N的关系,我试过N对N的关系,但是解不出来
有人能帮帮我吗?? :(
抱歉,我的问题是在控制器中我有主模型并使用两个模型。
主要型号:
--- Playlist.js ---
module.exports = {
attributes: {
name: {
type: 'string',
required: true,
unique: true
},
// Associations
tablets_playlists: {
collection: 'Tablet',
via: 'lista_tablet'
},
songs_playlist: {
collection: 'Song',
via: 'song'
}
}
};
其他型号:
--- Song.js ---
module.exports = {
attributes: {
group: {
type: 'string',
required: true,
unique: true
},
song: {
type: 'string'
},
// Association
song: {
collection: 'Playlist',
via: 'songs_playlist'
}
}
};
--- Tablet.js ---
module.exports = {
attributes: {
MAC: {
type: 'string',
required: true,
unique: true
},
// Associations
lista_tablet: {
collection: 'Playlist',
via: 'tablets_playlists'
}
};
当我在我的渲染视图中将歌曲与播放列表或平板电脑与播放列表相关联时,不会出现。但如果关系是 1 到 N,它就会出现。当我关联两次同一首歌时,服务器崩溃,我认为这是因为在bbdd中有或者它试图添加两个equals对象。
这是我将平板电脑与播放列表相关联的方法,类似于歌曲(我之前发布过)。
associateTabletToPlaylist: function(req,res,next){
var tablet_id = req.param('tablet_id');
var playlist_id = req.param('playlist_id');
Playlist.findOne(playlist_id, function foundPlaylist(err, playlist) {
if (err) return next(err);
if (!playlist) return next();
playlist.tablets_playlists.add(tablet_id);
playlist.save(function createAssociation(err, saved) {
if (err) res.redirect('/playlist/associateTablet/');
res.redirect('/playlist/show/' + playlist_id);
});
});
}
这是 PlaylistController 中要显示、呈现视图的代码:
// render the profile view (e.g. /playlist/show/.ejs)
show: function(req, res, next) {
Playlist.findOne(req.param('id'), function foundPlaylist(err, playlist) {
if (err) return next(err);
if (!playlist) return next();
Tablet.find({'listas_reproduccion':playlist.id},function foundTablets(err, tablets) {
if (err) return next(err);
if (!tablets) return next();
Song.find({'song':playlist.id}, function foundSongs(err, songs) {
if (err) return next(err);
if (!songs) return next();
res.view({
songs: songs,
tablets: tablets,
playlist: playlist
});
});
});
});
},
看起来你有一对一的关系,但你需要多对多。
歌曲有很多播放列表,播放列表有很多歌曲。您必须通过属性提供:
歌曲模型:
module.exports = {
attributes: {
name:'STRING',
// Add a reference to Playlists
playlists: {
collection: 'playlists',
via: 'songs'
}
}
}
播放列表模型:
module.exports = {
attributes: {
name:'STRING',
// Add a reference to Songs
songs: {
collection: 'songs',
via: 'playlists'
}
}
}