【问题标题】:Sequelize associations续集关联
【发布时间】:2017-05-30 11:41:49
【问题描述】:

我正在处理一个 Typescript Sequelize 项目,其中我的 /models/index.ts 文件具有以下“导入此目录中的所有模型”功能:

var basename = path.basename(module.filename);
fs
    .readdirSync(__dirname)
    .filter(function (file) {
        return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
    })
    .forEach(function (file) {
        console.log(file);
        var model = sequelize['import'](path.join(__dirname, file));
        console.log('here');
        // NOTE: you have to change from the original property notation to
        // index notation or tsc will complain about undefined property.
        db[model['name']] = model;
    });

然后我有这样的模型/models/user.ts:

export default function defineUser(sequelize: Sequelize.Sequelize, DataTypes) {
  var User = sequelize.define<UserInstance, UserAttributes>('User', {
    email: {
      type: Sequelize.STRING,
      unique: true,
      validate: { isEmail: true }
    },
    password: Sequelize.STRING
  });
  return User;
};

但是,我无法将模型从一个文件导入另一个文件,无法执行以下操作:

import * as User from './user'
// ... 
// definition of job model
// ...
Job.hasOne(User);

当我得到Argument of type 'typeof "~/models/job-response"' is not assignable to parameter of type 'Model&lt;any, any&gt;'. 然后:

~/node_modules\sequelize\lib\associations\mixin.js:95 [1] throw new Error(this.name + '.' + Utils.lowercaseFirst(Type.toString()) + ' 调用的东西不是 Sequelize.Model 的实例'); [1] ^ [1] [1] 错误:Job.function (srcModel, targetModel, options) { [1] 协会.call(this); [1] [1] } 调用的东西不是 Sequelize.Model 的实例 [1] 在 Model.hasOne (~\node_modules\sequelize\lib\associations\mixin.js:95:13)

我应该如何访问模型实例,以便将其传递给 hasMany()hasOne() 函数。

【问题讨论】:

    标签: node.js typescript sequelize.js


    【解决方案1】:

    在您的模型注册循环运行后,您的所有模型都将在 db.models 上可用,并按名称键入。因此,您可以在同一个文件或单独的文件中执行以下操作:

    db.models.Job.hasOne(db.models.User)
    

    我发现在单独的文件中定义关系很方便,因为如果你想定义关系的双方(即,belongsTo/hasMany),那么无论如何你都必须这样做(以避免循环依赖)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多