【问题标题】:Define models' relations in models' files - sequelize.js在模型文件中定义模型的关系 - sequelize.js
【发布时间】:2018-06-21 21:54:08
【问题描述】:

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

【问题讨论】:

    标签: javascript node.js sequelize.js


    【解决方案1】:

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

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

    【讨论】:

    • 我已经看到与您链接的答案类似的答案,但我想知道这是否是唯一的方法?我真的必须为我的模型之间的所有关系创建一个单独的文件吗?
    • 是的,这是唯一的方法,就像你说的那样,他们会将彼此视为未定义。这很丑,但必须这样做
    猜你喜欢
    • 1970-01-01
    • 2011-02-15
    • 2016-12-11
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多