首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sequelize.js模型关联

Sequelize.js模型关联
EN

Stack Overflow用户
提问于 2020-05-28 03:26:18
回答 1查看 32关注 0票数 0

我正在尝试建立一个火种克隆应用程序,我有两种不同类型的用户:一个player和一个trainer,他们可以匹配在一起。我查阅了文档,试图找出在matches表和messages表之间实现哪些正确的关联,其中匹配记录具有playerId和trainerId,消息也是如此。

我的问题是:

如何实现,以及何时应用belongsTo、hasMany、belongToMany关联?

这就是我到目前为止所做的:

代码语言:javascript
复制
players.model.js

players.associate = function (models) {
  players.hasMany(models.messages);
  players.hasMany(models.matches);
};
代码语言:javascript
复制
trainers.model.js

teachers.associate = function (models) {
  trainers.hasMany(models.messages);
  trainers.hasMany(models.matches);
};
代码语言:javascript
复制
messages.model.js

messages.associate = function (models) {
  messages.belongsTo(models.players);
  messages.belongsTo(models.trainers);
  messages.belongsTo(models.matches);
};
代码语言:javascript
复制
matches.model.js

matches.associate = function (models) {
  matches.belongsTo(models.players);
  matches.belongsTo(models.trainers);
  matches.hasMany(models.messages);
};
EN

回答 1

Stack Overflow用户

发布于 2020-05-28 05:32:30

您可以注册所有模型,然后再注册它们的所有关联,如下所示:

代码语言:javascript
复制
var fs = require('fs')
var path = require('path')
var basename = path.basename(module.filename)
var db = {}
var models = path.join(__dirname, 'models')

fs.readdirSync(models)
  .filter(function(file) {
    return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js')
  })
  .forEach(function(file) {
    var model = sequelize['import'](path.join(models, file))
    db[model.name] = model
  })

Object.keys(db).forEach(function(modelName) {
  if (db[modelName].associate) {
    db[modelName].associate(db)
  }
})

然后,您可以导出db对象以使用所有模型来查询数据

例如,使用训练器获取所有匹配,而玩家则包含以下内容:

代码语言:javascript
复制
const allMatches = db.matches.findAll({
  include: [db.trainers, db.players]
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62051287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档