假设我在现有的mysql数据库上有3个表;宋,歌手,管理。 我在续集模型上定义了表格(我使用了sequelize和sequelize-definer):
song.js
var Sequelize = require('sequelize');
module.exports = {
fields: {
id: {
type: Sequelize.INTEGER(11),
allowNull: false,
},
title: {
type: Sequelize.STRING,
allowNull: true,
},
singerId: {
type: Sequelize.INTEGER(11),
allowNull: true,
reference: 'songs',
},
}
};

singer.js
var Sequelize = require('sequelize');
module.exports = {
fields: {
id: {
type: Sequelize.INTEGER(11),
allowNull: false,
},
name: {
type: Sequelize.STRING,
allowNull: true,
},
managementId: {
type: Sequelize.INTEGER(11),
allowNull: true,
reference: 'singers',
},
}
};

management.js
var Sequelize = require('sequelize');
module.exports = {
fields: {
id: {
type: Sequelize.INTEGER(11),
allowNull: false,
},
name: {
type: Sequelize.STRING,
allowNull: true,
},
}
};

如果我的数据库上有1首歌: id:1, 标题:"重型旋转", 歌手:1
我的数据库上有1位歌手: id:1, 名称:" AKB48", managementId:1
我的数据库上的1个管理: id:1, 名称:" AKS"
和名为songObj的变量指的是重旋转歌曲。 当我做songObj.getSinger()时它会返回: {id:1,name:" AKB48",managementId:1}
我想要我的代码以便它可以返回 {id:1,姓名:" AKB48",管理:{id:1,姓名:" AKS"}}
在续集或其他ORM上是否可行?
答案 0 :(得分:1)
你想要的东西可以用Sequelize实现,你只需要修改你的模型'定义更像recommended convention
module.exports = function(sequelize, DataTypes) {
var Song = sequelize.define("Song", {
title: {
type: Sequelize.STRING,
allowNull: true
}
// and so on ...
});
return Song;
};
不需要身份证明声明。之后,并进行必要的关联,您可以使用Eager Loading来要求您需要的对象:
Singer.find({where: { id: 1 }, include : [Management]}})
甚至
Song.find({where: { id: 1 }, include :
[{
model: Singer,
include: [Management]
}]
})