2016-11-16 2 views
1

У меня есть два связанных с ними моделей (сокращенно для ясности)Sequelize - как получить связанную модель?

const model = (sequelize, DataTypes) => { 

    const User = sequelize.define('User', { 
     fullName: { 
     type: DataTypes.STRING, 
     allowNull: false, 
     validate: { 
      notEmpty: true, 
      len: [1,255] 
     } 
     } 
    }, 
    { 
     classMethods: { 
     associate: function(models) { 
      User.hasMany(models.Meeting, {as: 'chairedMeetings', foreignKey: 'chairmanId'}) 
     } 
     } 
    } 
) 

    return User 
} 

и

const model = (sequelize, DataTypes) => { 

    const Meeting = sequelize.define('Meeting', { 
     title: { 
     type: DataTypes.STRING, 
     allowNull: false, 
     validate: { 
      notEmpty: true, 
      len: [1,255] 
     } 
     } 
    }, { 
     classMethods: { 
     associate: function(models) { 
      Meeting.belongsTo(models.User, {as: 'chairman'}) 
     } 
     } 
    } 
) 

    return Meeting 
} 

module.exports = model 

создать новую встречу, отводился ранее созданный пользователем с id = 1 следующим образом:

const data = { 
    title: 'Some amazing meeting title', 
    chairmanId: 1 
} 

Meeting.create(data, {include: [{all: true, nested: true}]}).then(meeting => { 
    const chairmanId = meeting.get('chairmanId') // ===> this is 1 as expected 
    const chairman = meeting.get('chairman')  // ===> but this is undefined 
} 

Как получить продолжение, чтобы вернуть связанную запись без необходимости вручную проходить через ассоциации и findOne на id?

ответ

0

Хорошо понял это:

Решение сделать reload после создания.

Meeting.create(data, {include: [{all: true, nested: true}]}).then(meeting => { 
    const chairmanId = meeting.get('chairmanId') // ===> this is 1 as expected 
    meeting.reload({include: [{all: true, nested: true}]}).then(reloadedMeeting => { 
    const chairman = reloadedMeeting.get('chairman') // ===> is a user! 
    }) 
} 

Я думаю sequelize не автоматически перезагружать после создания в случае, если вы никогда не заботиться о модели вы только что создали, и вы просто хотите знать, что это был спасен.

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