定义模型'模特中的关系'文件 - sequelize.js

时间:2018-01-12 12:20:44

标签: javascript node.js sequelize.js

我看到了一些类似问题/问题的问题,但它们基于旧版本的sequelize.js,遗憾的是这些答案无法应用于v.4。

我定义了两个模型:UserTag。用户可以拥有多个标签,标签可以属于一个用户(1:m关系)。我有两个单独的文件来定义我的模型:

User.js档案:

import Tag from './Tag';

const userFields = { /* my fields definitions... */ };

const User = sequelize.define('user', userFields);

User.hasMany(Tag, {
  foreignKey: 'user_id',
  constraints: true,
});

export default User;

Tag.js档案:

import User from './User';

const tagFields = { /* tag fields definitions... */ };

const Tag = sequelize.define('tag', tagFields);

Tag.belongsTo(User, {
  foreignKey: 'user_id',
  constraints: false
});

export default Tag;

显然它不起作用,因为这两个文件试图互相导入,其中一个看到其他undefined,我看到错误User called with something that's not a subclass of Sequelize.Model

文档仅提供类似于下面的示例,其中模型在一个文件中定义:

const Player = this.sequelize.define('player', {/* attributes */});
const Team  = this.sequelize.define('team', {/* attributes */});

Player.belongsTo(Team); // Will add a teamId attribute to Player to hold the primary key value for Team

所以,我的问题是:我如何定义模型中模型之间的关联'文件?我知道一个解决方案是在单独的文件中创建一个函数(将创建关联的函数),并在定义模型后调用它。但是我希望将这些关联与模型相关联。定义。我怎么能在sequelize@v.4中做到这一点?

1 个答案:

答案 0 :(得分:0)

库版本的差异无关紧要。实际上重要的是你将代码放在声明关联的地方。我知道它不是很漂亮,但你要做的是在声明模式的两个文件之外声明你的关联。

此答案解释了它,并显示了库https://stackoverflow.com/a/36877672/614277

使用的示例