【问题标题】:How to create relationship between two tables using feathersjs, sequelize and postgresql如何使用feathersjs、sequelize和postgresql创建两个表之间的关系
【发布时间】:2022-04-20 23:15:04
【问题描述】:

当我在这两个模型之间创建关系并使用 npm run 运行 feathersjs 时,我有两个模型 users.model.jsswing-trades.model.js dev`,我收到一个错误。

抛出新错误(${this.name}.hasMany called with something that's not a subclass of Sequelize.Model); ^

错误:users.hasMany 调用的东西不是 续集.模式

**users.model.js**

// See http://docs.sequelizejs.com/en/latest/docs/models-definition/
// for more of what you can do here.
const Sequelize = require('sequelize');
const DataTypes = Sequelize.DataTypes;

module.exports = function (app) {
  const sequelizeClient = app.get('sequelizeClient');
  const users = sequelizeClient.define('users', {

    email: {
      type: DataTypes.STRING,
      allowNull: true,
      unique: true
    },
    password: {
      type: DataTypes.STRING,
      allowNull: true
    },
    username: {
      type: DataTypes.STRING,
      allowNull: true,
    },
    firstName: {
      type: DataTypes.STRING,
      allowNull: true,
    },
    lastName: {
      type: DataTypes.STRING,
      allowNull: true,
    }
  },
  {
    timestamps: true, // Enable timestamps
    createdAt: true, // Don't create createdAt
    updatedAt: true, // Don't create updatedAt
    // eslint-disable-next-line no-dupe-keys
    updatedAt: 'updateTimestamp', // updatedAt should be called updateTimestamp
  },
  {
    hooks: {
      beforeCount(options) {
        options.raw = true;
      }
    }
  });

  // eslint-disable-next-line no-unused-vars
  users.associate = function (models) {
    // Define associations here
    // See http://docs.sequelizejs.com/en/latest/docs/associations/
    const {swingTrades} = models;

    users.hasMany(swingTrades, {as: 'swingTrades', foreignKey: 'userId'}); // will add userid to swingtrades model
  };

  return users;
};

swing-trades.model.js

// See http://docs.sequelizejs.com/en/latest/docs/models-definition/
// for more of what you can do here.
const Sequelize = require('sequelize');
const DataTypes = Sequelize.DataTypes;

module.exports = function (app) {
  const sequelizeClient = app.get('sequelizeClient');
  const swingTrades = sequelizeClient.define('swing_trades', {
    company: {
      type: DataTypes.STRING,
      allowNull: true
    }
  },
  {
    timestamps: true, // Enable timestamps
    createdAt: false, // Don't create createdAt
    updatedAt: false, // Don't create updatedAt
    // eslint-disable-next-line no-dupe-keys
    updatedAt: 'updateTimestamp', // updatedAt should be called updateTimestamp
  },
  {
    hooks: {
      beforeCount(options) {
        options.raw = true;
      }
    }
  });

  // eslint-disable-next-line no-unused-vars
  swingTrades.associate = function (models) {
    // Define associations here
    // See http://docs.sequelizejs.com/en/latest/docs/associations/
    const {users} = models;

    swingTrades.belongsTo(users,{foreignKey: 'userId'});
    
  };

  return swingTrades;
};

我还没有找到任何解决方案。

【问题讨论】:

    标签: node.js postgresql sequelize.js feathersjs


    【解决方案1】:

    那是因为模型名称和服务名称不匹配。这里有swingTrades

     **users.model.js**
     // eslint-disable-next-line no-unused-vars
     users.associate = function ({swingTrades) {
        users.hasMany(swingTrades, {
        as: 'swingTrades',
        foreignKey: 'userId' 
        }); 
     };
    

    但是在swing-trades.model.js 中你有swing_trades

    ...
    const swingTrades = sequelizeClient.define('swing_trades', {
        company: {
          type: DataTypes.STRING,
          allowNull: true
        }
      },
    ...
    

    解决方案是在创建新服务时避免使用空格和 -。用一个词来命名一项服务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-03
      • 1970-01-01
      • 1970-01-01
      • 2019-08-24
      • 2019-01-03
      • 1970-01-01
      • 2020-12-09
      相关资源
      最近更新 更多