在模型文件中定义模型的关系 - 续集.js



我看到了一些类似的问题/问题,但它们是基于旧版本的续集.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 中做到这一点?

库版本的差异无关紧要。真正重要的是你把代码放在什么地方负责声明关联。我知道它不是很漂亮,但是您要做的是在声明架构的两个文件之外声明您的关联。

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

最新更新