2015-10-24 3 views
0

Моих модели:Внешний ключ всегда нуль в Sequelizejs

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» (get создается автоматически) всегда равен NULL

Что я делаю неправильно?

ответ

0

Вы создаете записи PodcastEntry в той же области, что и при создании записи подкаста. Поэтому, к моменту чтения потока, переменная Podcast не была установлена ​​на вставленную запись. Вы должны поместить код, который создает записи PodcastEntry, только после того, как сиквелиза закончит вставку записи подкаста.

+0

спасибо большое !!! – user547995

Смежные вопросы