sequelize中未处理的拒绝SequelizeEagerLoadingError-Node.js

时间:2019-06-19 13:01:25

标签: mysql node.js sequelize.js sequelize-typescript

这是我的父级模型Providers

    module.exports = function(sequelize, DataTypes) {
        const Providers = sequelize.define('Providers', {
              provider_id: {
                type: DataTypes.INTEGER,
                primaryKey: true,
                autoIncrement: true
              },
              provider_name: DataTypes.STRING,
              address: DataTypes.STRING,
              city: DataTypes.STRING,
              state: DataTypes.STRING,
              zip: DataTypes.STRING,
              phone: DataTypes.STRING,
              website: DataTypes.STRING,
              accepting_new_clients: DataTypes.INTEGER
          });

          Providers.associate = models => {
            Providers.belongsTo(model.Providerclients, {foreignKey: "provider_id" })
        }
          return Providers;
      }

这是我的孩子模型Providerclients

    module.exports = function(sequelize, DataTypes) {
        const Providerclients = sequelize.define('provider_clients', {
            provider_client_id: {
                type: DataTypes.INTEGER,
                primaryKey: true,
                autoIncrement: true
              },
              provider_id: DataTypes.INTEGER,
              client_id: DataTypes.INTEGER
          },{});

          Providerclients.associate = (models) => {
            Providerclients.belongsToMany(models.Providers, {foreignKey: "provider_id"});
        };


          return Providerclients;
      }

这是我的另一个孩子模型Providerinsurance

    module.exports = function(sequelize, DataTypes) {
        const Providerinsurance = sequelize.define('provider_insurance', {
            provider_insurance_id: {
                type: DataTypes.INTEGER,
                primaryKey: true,
                autoIncrement: true
              },
              provider_id: DataTypes.INTEGER,
              insurance_id: DataTypes.INTEGER
          },{});

          return Providerinsurance;
      }

我试图从提供者表中加入提供者客户机表中获取数据。 为了清楚起见,我想以mysql格式运行以下查询

 select * from providers as p left join provider_clients as pc on p.provider_id = pc.provider_id left join provider_insurance as pi on p.provider_id = pi.provider_id

正如您在Providers和Providerclients模型中看到的那样,我尝试加入了续集。我收到以下错误

Unhandled rejection SequelizeEagerLoadingError: provider_clients is not associated to Providers!

1 个答案:

答案 0 :(得分:0)

这些是您结构中的关联问题。将您的关联更改为hasMany

provider.hasMany(clientProvider)

这会将provider id添加到client provider中。

http://docs.sequelizejs.com/manual/associations.html#one-to-many-associations--hasmany-

这是摘要

Player.belongsTo(Team)  // `teamId` will be added on Player / Source model

User.belongsTo(Company, {foreignKey: 'fk_company'}); // Adds fk_company to User

User.belongsTo(Company, {foreignKey: 'fk_companyname', targetKey: 'name'}); // Adds fk_companyname to User
========================================================================
Coach.hasOne(Team)  // `coachId` will be added on Team / Target model

============================================================================
Project.hasMany(User)
This will add the attribute projectId or project_id to User. Instances of Project will get the accessors getWorkers and setWorkers.

Project.hasOne(User)
hasOne will add an attribute projectId to the User model!