javascript - 在模型文件中定义模型的关系 - Sequelize.js

标签 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;

显然它不起作用,因为这两个文件尝试相互导入,其中一个将另一个文件视为未定义,并且我看到错误:用户使用不是 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 中做到这一点?

最佳答案

库版本的差异并不重要。真正重要的是您将负责声明关联的代码放在哪里。我知道它不是很漂亮,但是您要做的就是在声明架构的两个文件之外声明您的关联。

这个答案解释了它并显示了库 https://stackoverflow.com/a/36877672/614277 使用的示例

关于javascript - 在模型文件中定义模型的关系 - Sequelize.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48226204/

相关文章:

javascript - 如何通过动画CSS隐藏点击的div

node.js - 使用关联元数据对插入数据进行序列化

node.js - 用于处理 LUIS 意图、匹配意图和主动对话的机器人框架

javascript - 将自定义对象的 Mongoose PUT 实现到复杂模式中时出现问题

javascript - 当所有组件都在一个文件中时,Angular App 可以正常工作,但当组件位于单独的文件中时,会抛出 'nomod' 错误

javascript - 在React Native中找到数组元素的总和

javascript - 未知的身份验证策略 "local"

node.js - 创建具有关联但没有父实例的新模型

javascript - Nodejs使用mysql Sequelize RangeError

mongodb - node.js 身份验证与 Sequelize 和 Passport - promise 和回调混淆