我使用Sequelize,我试图在两个不同的表之间创建关联,其中x.belongsTo(y)
和y.hasMany(x)
。在完成x.setY(yInstance)
和y.getXs()
之后,似乎只有新行已添加到x中,并且未创建与我已创建实例的关联。续集关联:设置[模型]添加新模型,而不是关联现有的模型
var Promise = require("bluebird"),
Sequelize = require("sequelize");
var sequelize = new Sequelize("Test", "postgres", "password", {
host: "localhost",
dialect: "postgres",
pool: {
max: 5,
min: 0,
idle: 10000
}
});
var Schedule = sequelize.define("Schedule", {
website: {
type: Sequelize.STRING
}
});
var SiteConfig = sequelize.define("SiteConfig", {
systemType: {
type: Sequelize.STRING
}
});
var Selector = sequelize.define("Selector", {
type: {
type: Sequelize.STRING
},
content: {
type: Sequelize.STRING
}
});
Selector.belongsTo(SiteConfig);
SiteConfig.hasMany(Selector);
var testSchedule = {
website: "google.com"
};
var testSiteConfig = {
systemType: "one"
};
var testSelectors = [
{type: "foo", content: "foo"},
{type: "foo", content: "bar"}
];
Promise.all([
Schedule.sync({force: true}),
SiteConfig.sync({force: true}),
Selector.sync({force: true})
]).then(function() {
return Promise.all([
Schedule.create(testSchedule),
SiteConfig.create(testSiteConfig),
Selector.bulkCreate(testSelectors)
]);
}).spread(function (schedule, siteConfig, selectors) {
return Promise.map(selectors, function (selector) {
return selector.setSiteConfig(siteConfig);
}).then(function (array) {
return siteConfig.getSelectors();
}).each(function (selector) {
// This is where I expect "foo" and "bar" but instead get null
console.log("Selector content:", selector.get("content"));
});
});
我期望这个代码到SiteConfigId
列添加到我的Selectors
让我siteConfig.getSelectors()
会回到我的testSelectors。我怎样才能做到这一点?
我还应该补充说我使用sequelize.sync()而不是同步每个单独的模型。 – 2015-04-03 17:24:53
谢谢,您的代码正常工作!然而,我意识到,我的代码的主要问题是,我正在使用'bulkCreate'作为testSelectors而不是'create',它返回没有ID的插入行。从文档:http://docs.sequelizejs.com/en/latest/docs/instances/#working-in-bulk-creating-updating-and-destroying-multiple-rows-at-once 看来你的代码可以有相同的问题(虽然它不实际),你能帮我说明它为什么工作或编辑你的答案迭代testSelectors(而不是bulkCreate),我会很高兴地将它标记为接受:) – fredrikekelund 2015-04-04 10:48:36