【问题标题】:Sequelize — how to get associated model?Sequelize——如何获得关联模型?
【发布时间】:2017-03-30 01:21:54
【问题描述】:

我有两个关联的模型(为了清楚起见,缩写)

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
}

如何在无需手动通过关联和findOneid 的情况下返回关联记录?

【问题讨论】:

    标签: javascript node.js associations sequelize.js


    【解决方案1】:

    好吧,想通了:

    解决办法是在创建后做一个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 不会在创建后自动重新加载,以防你从不真正关心你刚刚创建的模型,而你只是想知道它被保存了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-25
      相关资源
      最近更新 更多