gpt4 book ai didi

node.js - 如何将 Sequelize 模型及其关联放入一个文件中?

转载 作者:行者123 更新时间:2023-12-03 22:19:06 28 4
gpt4 key购买 nike

我发现如果我不将所有关联(hasMany 等)放入一个文件中,则会出现以下错误。

   throw new Error(`${this.name}.belongsToMany called with something that's not a subclass of Sequelize.Model`);
^
Error: users.belongsToMany called with something that's not a subclass of Sequelize.Model
at Function.belongsToMany (C:\app\node_modules\sequelize\lib\associations\mixin.js:49:13)
at Object.<anonymous> (C:\app\models\/user.ts:51:6)
根据 this post ,这可以通过将所有关联放入一个文件来解决。
不过,我认为这不是一个好方法,因为
  • 如果你想了解一个模型,你必须检查模型定义(下面例子中的 models/user.ts )和关联文件(类似于 models/index.ts )。
  • 如果您有许多带有关联的模型,关联文件可能会非常大。

  • 如何将 Sequelize 模型及其关联放入同一个文件中?
    这就是我想要实现的目标。
    // `models/user.ts`
    import { Role } from './role';

    const User = sequelizeInstance.define<UserInstance>(
    'users', {/* fields */},
    );

    User.belongsToMany(Role, {
    through: 'user_roles',
    foreignKey: 'userId',
    otherKey: 'roleId',
    });

    export { User };
    // `model/role.ts`.
    import { User } from './user';

    const Role = sequelizeInstance.define<RoleInstance>(
    'roles', {/* fields */}
    );

    Role.belongsToMany(User, {
    through: 'user_roles',
    foreignKey: 'userId',
    otherKey: 'roleId',
    });

    export { Role };
    任何建议将被认真考虑。

    最佳答案

    这是我所做的。
    我使用 associate 属性在模型声明中声明了每个模型关联。在你的情况下是这样的:

    const Role = sequelizeInstance.define<RoleInstance>(
    'roles', {/* fields */}
    );
    Role.associate = function (models) {
    Role.belongsToMany(models.users, {
    through: 'user_roles',
    foreignKey: 'userId',
    otherKey: 'roleId',
    });
    });
    然后在我的索引文件中,我写了几行来从模型声明中获取所有关联并应用它们:
    db.roles = // assign your Role model
    db.users = // assign your User model

    // setup table associations
    Object.keys(db).forEach(function (modelName) {
    if ('associate' in db[modelName]) {
    // call the associate function and pass reference to all other models
    db[modelName].associate(db);
    }
    });
    通过这种方式,我可以保持紧凑的索引,动态获取和应用关联并在每个模型中声明关联

    关于node.js - 如何将 Sequelize 模型及其关联放入一个文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66013210/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com