我使用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