Sequelize нетерпеливая проблема загрузки: дочерний элемент, не связанный с родительским - PullRequest
0 голосов
/ 28 августа 2018

У меня есть следующее включение:

context.params.sequelize = {
    raw: false,
    include: [{
      model: organisationUsers,
      required: false,
      include: [{
        required: false,
        model: roles,
        where: roleId ? { roleId } : undefined,
      }],
    }],
}

У меня есть следующие структуры данных: OrganisationUsers:

const organisationUsers = sequelizeClient.define('organisation_users', {
    id: {
      type: DataTypes.INTEGER,
      primaryKey: true,
      autoIncrement: true
    },
    roleId: {
      type: DataTypes.INTEGER,
      allowNull: true,
    },
    organisationId: {
      type: DataTypes.INTEGER,
      allowNull: true,
    },
    userId: {
      type: DataTypes.INTEGER,
      allowNull: true,
    },
  }, {
      hooks: {
        beforeCount(options) {
          options.raw = true;
        },
      }
    });

  // eslint-disable-next-line no-unused-vars
  organisationUsers.associate = (models) => {
    // Define associations here
    // See http://docs.sequelizejs.com/en/latest/docs/associations/
    organisationUsers.belongsTo(models.organisations, { foreignKey: 'organisationId' });
    organisationUsers.belongsTo(models.roles, { foreignKey: 'roleId' });
    organisationUsers.belongsTo(models.users, { foreignKey: 'userId' });
  };

Роль:

const roles = sequelizeClient.define('roles', {
    name: {
      type: DataTypes.STRING,
      allowNull: false
    }
  }, {
      hooks: {
        beforeCount(options) {
          options.raw = true;
        }
      },
    });

  // eslint-disable-next-line no-unused-vars
  roles.associate = (models) => {
    // Define associations here
    // See http://docs.sequelizejs.com/en/latest/docs/associations/
    roles.belongsToMany(models.permissions, { through: 'role_permissions' });
    roles.hasMany(organisationUsers(app), { foreignKey: 'roleId' });
  };

И пользователи:

const users = sequelizeClient.define('users', {
    email: {
      type: DataTypes.STRING,
      allowNull: false,
      unique: true,
      validate: {
        isEmail: true
      }
    },
    password: {
      type: DataTypes.STRING,
      allowNull: false
    },
  }, {
      hooks: {
        beforeCount(options) {
          options.raw = true;
        }
      }
    });

  // eslint-disable-next-line no-unused-vars
  users.associate = (models) => {
    // Define associations here
    // See http://docs.sequelizejs.com/en/latest/docs/associations/
    users.hasMany(organisationUsers(app), { foreignKey: 'userId' });
  };

Если в таблице OrganisationUsers есть значения roleId, userId и organisationId, то все работает нормально, но если в таблице OrganisationUsers отсутствует связь, я получаю следующую ошибку:

SequelizeEagerLoadingError: roles is not associated to organisation_users!

Я не уверен, что делать с этой ошибкой, я читал о включении обязательного: ложного утверждения, которое, как вы можете видеть выше, я пытался.

Я не уверен, что проблема связана с вложенным включением? Если я удалю вложенное включение, чтобы оно выглядело так:

context.params.sequelize = {
        raw: false,
        include: [{
          model: organisationUsers,
        }],
    }

чем все работает хорошо.

Если у вас есть идеи, советы, предложения и т. Д., Пожалуйста, дайте мне знать.

С уважением, Эмир

...