我的模特:
module.exports = function(sequelize, DataTypes){
var Podcast = sequelize.define('Podcast', {
id: { type: DataTypes.INTEGER, primaryKey: true,autoIncrement: true},
title: DataTypes.STRING(400),
description: DataTypes.STRING(2000),
img: DataTypes.STRING,
feed: {type: DataTypes.STRING, unique: true},
home: DataTypes.STRING
})
return Podcast;
}
module.exports = function(sequelize, DataTypes){
var PodcastEntry = sequelize.define('PodcastEntry', {
id: { type: DataTypes.INTEGER, primaryKey: true,autoIncrement: true},
title: DataTypes.STRING(400),
summary: DataTypes.STRING(2000),
pubdate: DataTypes.DATE,
guid: {type: DataTypes.STRING(400)},
link: {type: DataTypes.STRING(400)},
length: DataTypes.INTEGER
})
return PodcastEntry;
}
设置关系:
db.Podcast.hasMany(db.PodcastEntry);
db.PodcastEntry.belongsTo(db.Podcast);
插入值:
var Podcast = {};
db.Podcast.findOrCreate({
where: {
title: meta.title,
feed: url
},
defaults: {
description: meta.description,
img: meta.image.url,
home: meta.link
}
})
.spread(function(podcast, created) {
Podcast = podcast;
log.info(podcast.title + " created " + created);
});
while (item = stream.read()) {
db.PodcastEntry.findOrCreate({
where : {
PodcastId: Podcast.id,
guid: item.guid
},
defaults: {
title: item.title,
summary: item.summary,
pubdate: new Date(item.pubdate),
link: item.enclosures[0].url,
length: item.enclosures[0].length,
PodcastId: Podcast.id
}})
.spread(function(podcastEntry, created){
log.info(podcastEntry.title + " created " + created);
});
}
播客条目是在我的数据库中创建的,但问题是外键'PodcastId'(自动创建)始终为NULL
我做错了什么?
答案 0 :(得分:0)
您正在创建与创建Podcast记录相同的范围内创建PodcastEntry记录。因此,在读取流时,Podcast变量尚未设置为插入的记录。只有在sequelize完成插入Podcast记录后,才应该创建创建PodcastEntry记录的代码。
db.Podcast.findOrCreate({
where: {
title: meta.title,
feed: url
},
defaults: {
description: meta.description,
img: meta.image.url,
home: meta.link
}
})
.spread(function(podcast, created) {
Podcast = podcast;
log.info(podcast.title + " created " + created);
while (item = stream.read()) {
db.PodcastEntry.findOrCreate({
where : {
PodcastId: Podcast.id,
guid: item.guid
},
defaults: {
title: item.title,
summary: item.summary,
pubdate: new Date(item.pubdate),
link: item.enclosures[0].url,
length: item.enclosures[0].length,
PodcastId: Podcast.id
}
})
.spread(function(podcastEntry, created){
log.info(podcastEntry.title + " created " + created);
});
}
});