【问题标题】:Where to define sequelize associations在哪里定义 sequelize 关联
【发布时间】:2020-05-22 09:01:10
【问题描述】:

我在我的 Node js 应用程序中使用了 sequelize。所有模型都定义在单独的文件中,例如user.jsmessage.js 等。我还有自动生成的index.js 文件,这是它的sn-p,你可能会认出它:

if (config.use_env_variable) {
  sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
  sequelize = new Sequelize(config.database, config.username, config.password, config);
}

fs
  .readdirSync(__dirname)
  .filter(file => {
    return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
  })
  .forEach(file => {
    const model = sequelize['import'](path.join(__dirname, file));
    db[model.name] = model;
  });

Object.keys(db).forEach(modelName => {
  if (db[modelName].associate) {
    db[modelName].associate(db);
  }
});

db.sequelize = sequelize;
db.Sequelize = Sequelize;

所以我正在查看 sequelize here 的关联手册。 我不知道这在我的情况下会去哪里,因为我使用的是自动生成的index.js 文件,它收集了所有models。在他们的示例中,正如您在链接上看到的那样,他们有如下内容:

const A = sequelize.define('A', /* ... */);
const B = sequelize.define('B', /* ... */);

A.hasOne(B); // A HasOne B
A.belongsTo(B); // A BelongsTo B
A.hasMany(B); // A HasMany B
A.belongsToMany(B, { through: 'C' }); 

当我的模型分布在多个文件中时,我将如何做同样的事情?我已经尝试过这样的事情(例如,在消息模型中):

  return sequelize.define('message', {
    message_id: {
      type: DataTypes.BIGINT,
      allowNull: false,
      autoIncrement:true,
      primaryKey: true
    },
    user_id: {
      type: DataTypes.BIGINT,
      allowNull: true
    }
    // and other stuff..
  }, {
    tableName: 'message'
  }).hasOne(require('./user'));
};

这给出了一个错误:message.hasOne 调用的东西不是 Sequelize.Model 的子类

有什么想法吗?

谢谢。

【问题讨论】:

    标签: node.js sequelize.js


    【解决方案1】:

    我是这样做的:

    module.exports = (sequelize, DataTypes) => {
      const MyEntity = sequelize.define(
        'MyEntity',
        {
          name: DataTypes.STRING
        },
        {}
      );
      MyEntity.associate = function(models) {
        // associations can be defined here
        MyEntity.hasMany(models.OtherEntity, {
          foreignKey: 'myEntityId',
          as: 'myEntities'
        });
      };
      return MyEntity;
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-07
      • 1970-01-01
      • 2021-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-03
      • 1970-01-01
      相关资源
      最近更新 更多