【问题标题】:Including a belongsTo association in sequelize在 sequelize 中包含 belongsTo 关联
【发布时间】:2018-07-13 19:40:11
【问题描述】:

我正在关注文档中的 sequelize 示例,但我不知道如何在子模型中包含与父级的关联。

docs on associations中,模型和模型之间的关系是这样定义的:

Product.User = Product.belongsTo(User);
User.Addresses = User.hasMany(Address);

return Product.create({
  title: 'Chair',
  user: {
    first_name: 'Mick',
    last_name: 'Broadstone',
  }
}, {
  include: [{
    association: Product.User,
  }]
});

关联分配给 Product.User,并包含在包含数组中。

在续集minimum express application 中,模型在单独的文件中定义,并且通过调用模型上的方法来建立关联。在这种情况下,我有 Message 和 User,在一条消息和它的用户之间有一个 belongsTo 关系。

//message.js

module.exports = (sequelize, DataTypes) => {
  var Message = sequelize.define('Message', {
    content: DataTypes.STRING,
    authorId: DataTypes.INTEGER,
  });

  Message.associate = function (models) {
    models.Message.belongsTo(models.User, {
      foreignKey: 'authorId',
      as: 'author',
    });
  };
  return Message;
};

//user.js
module.exports = (sequelize, DataTypes) => {
  var User = sequelize.define('User', {
    firstName: DataTypes.STRING,
  });

  User.associate = function (models) {
    models.User.hasMany(models.Message, {foriegnKey: 'authorId'});
  };

  return User;
};

我认为我需要以某种方式从模型中获取关联。我按照文档在模型之间建立关联:

Object.keys(db).forEach(modelName => {
  if (db[modelName].associate) {
    db[modelName].associate(db);
  }
});

但是我该怎么做Message.User = Message.belongsTo(User) 这样当我创建包含数组时才做include[{association: Message.User}]

【问题讨论】:

    标签: javascript database associations sequelize.js belongs-to


    【解决方案1】:

    好吧...我意识到既然已经建立了关联,我所要做的就是包含模型:

    const createMessage = async (message) => {
      const author = await findUser(message.author);
      if (author) {
        const authorId = author.dataValues.id;
        return db.Message.create({
          content: message.content,
          authorId: authorId,
        });
      } else {
        return db.Message.create({
          author: {
            firstName: message.author,
          },
          content: message.content,
        }, {include:[{model: db.User, as: 'author'}],
        });
      }
    };

    【讨论】:

      猜你喜欢
      • 2013-10-05
      • 2019-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-22
      • 1970-01-01
      • 2023-03-24
      • 2019-08-23
      相关资源
      最近更新 更多