如何使
Music
成为“音乐”?
{
id: 4
name: "playlist 1"
created_at: "2015-04-21T21:43:07.000Z"
updated_at: "2015-04-23T20:44:50.000Z"
Music: [
{
id: 12
name: "Deorro - Five Hours (Static Video) [LE7ELS]"
video_id: "K_yBUfMGvzc"
thumbnail: "https://i.ytimg.com/vi/K_yBUfMGvzc/default.jpg"
created_at: "2015-04-22T21:46:21.000Z"
updated_at: "2015-04-22T21:46:21.000Z"
playlist_id: 4
}
]
}
我的查询类似于:
.get(function (req, res) {
db.Playlist.findAll({
include: [db.Music]
}).then(function (playlists) {
if(!playlists) {
res.status(404).json({message: 'No playlist found!'});
return;
}
res.json(playlists)
})
})
播放列表型号:
module.exports = function(sequelize, DataType) {
var Playlist = sequelize.define('Playlist', {
name: DataType.STRING
}, {
classMethods: {
associate: function(models) {
Playlist.hasMany(models.Music, { foreignKey: 'playlist_id' });
}
},
tableName: 'playlists',
underscored: true
});
return Playlist;
};
音乐模型:
module.exports = function(sequelize, DataType) {
var Music = sequelize.define('Music', {
name: DataType.STRING,
video_id: DataType.STRING,
thumbnail: DataType.STRING
}, {
classMethods: {
associate: function(models) {
Music.belongsTo(models.Playlist);
}
},
tableName: 'musics',
underscored: true
});
return Music;
}
更改型号名称中的大小写:
sequelize.define('music', ...)
或者在关联中提供
as
键:
Playlist.hasMany(Music, { as: 'music' })
更方便参考的工作代码:
播放列表型号:
module.exports = function(sequelize, DataType) {
var Playlist = sequelize.define('Playlist', {
name: DataType.STRING
}, {
classMethods: {
associate: function(models) {
Playlist.hasMany(models.Music, { as: 'music', foreignKey: 'playlist_id' });
}
},
tableName: 'playlists',
underscored: true
});
return Playlist;
};
音乐模型:不变
查询:
controller.route('/playlist')
.get(function (req, res) {
db.Playlist.findAll({
include: [{ model: db.Music, as: 'music' }]
}).then(function (playlists) {
if(!playlists) {
res.status(404).json({message: 'No playlist found!'});
return;
}
res.json(playlists)
})
})
有一个更短的解决方案。例如,报告模型,在定义模型时传递“名称”选项:
name: {
singular: 'report',
plural: 'reports'
}