尝试添加关联并将其保存到数据库
js
var Device = models.Device;
var Log = models.Log;;
var logs = [
{
"message_level" : 1,
"message" : "test log 1"
},
{
"message_level" : 1,
"message" : "test log 2"
},
{
"message_level" : 1,
"message" : "test log 3"
}
];
var devID = 'X3dE4DEW';
describe('Logs', function() {
it('should create log', function(done) {
Device.create({
"originalID" : devID
}).then(
function() {
return Device.findOne({"where": {originalID: devID},
include: [ { model: Log, as : "Logs" } ] }).then(
function(device) {
if (device) {
logs = logs.map(
function(log) {
return Log.build(log);
}
);
console.log(logs) // is NOT Empty -> OK
return device.addLogs(logs).then(
function(device) {
return device.getLogs().then(
function(logs) {
console.log(logs); // EMPTY [] -> NOT OK
logs.length.should.equal(3);
done();
}
);
}
);
}
return Promise.reject('Not valid Device ID');
}
).catch(function(error){
console.log(error);
done();
});
}
);
});
});
这里是如何定义的
// models
// Device
Device = pg.define('device', {
originalID: {
type: Sequelize.STRING(16) // Up to 16
}
});
// LogRecord
Log = pg.define('log', {
message_level: {
type: Sequelize.INTEGER
},
message: {
type: Sequelize.STRING(100) // Up to 100
}
});
Device.hasMany(Log, { as : "Logs" });
Log.belongsTo(Device);
addLogs
应该将关联项目保存到数据库
未保存项目,device.getLogs()
返回空数组[]
{ AssertionError: expected 0 to equal 3 }
方言: PG 数据库版本: 9.6.1 Sequelize版本: ~3.30.x
答案 0 :(得分:0)
有几种关联行的解决方案
如果您正在使用add<Association(s)>
功能,请确保关联的对象已存储在数据库中。
或者您可以使用create<Association>
创建模型和关联。
var device;
Device.create({
"originalID" : devID
}).then(function(createdDevice) {
device = createdDevice;
return Promise.all(logs.map(log=>{return device.createLog(log);}));
}).then(function(result) {
return device.getLogs();
}).then(function(logs) {
console.log(logs);
logs.length.should.equal(3);
done();
}).catch(function(error){
console.log(error);
done();
});
使用上面的承诺风格,它更容易理解,而不是&#34;深入承诺&#34;。