Sequelize Node.js Модель не связана с моделью - PullRequest
0 голосов
/ 15 апреля 2020

В моем приложении Node JS есть две модели: пользователи и компании. Когда я пытаюсь использовать функцию включения при получении компаний, я получаю сообщение об ошибке:

message: "users is not associated to companies!"

Это модель пользователя

import { Sequelize, DataTypes } from 'sequelize';
import { Application } from '../declarations';

export default function (app: Application) {
  const sequelizeClient: Sequelize = app.get('sequelizeClient');
  const users = sequelizeClient.define('users', {
    email: {
      type: DataTypes.STRING,
      allowNull: false,
      unique: true
    },
    password: {
      type: DataTypes.STRING,
      allowNull: true
    },
    role: {
      type: DataTypes.STRING,
      allowNull: true,
    },
    language: {
      type: DataTypes.STRING,
      allowNull: false,
      defaultValue: 'en',
    },
    firstName: {
      type: DataTypes.STRING,
      allowNull: false
    },
    lastName: {
      type: DataTypes.STRING,
      allowNull: false,
    },
  }, {
    underscored: true,
    hooks: {
      beforeCount(options: any) {
        options.raw = true;
      }
    }
  });

  // eslint-disable-next-line no-unused-vars
  (users as any).associate = function (models: any) {
    (users as any).belongsTo(models.companies, {
      foreignKey: 'companyId',
      allowNull: true,
      onDelete: "CASCADE",
    });
  };

  return users;
}

и модель компании:

import { Sequelize, DataTypes, Model } from 'sequelize';
import { Application } from '../declarations';

export default function (app: Application) {
  const sequelizeClient: Sequelize = app.get('sequelizeClient');
  const companies = sequelizeClient.define('companies', {
    name: {
      type: DataTypes.STRING,
      allowNull: false
    },
    phone: {
      type: DataTypes.STRING,
      allowNull: false,
      defaultValue: '',
    },
    email: {
      type: DataTypes.STRING,
      allowNull: false,
      defaultValue: '',
    },
    active: {
      type: DataTypes.BOOLEAN,
      allowNull: false,
      defaultValue: true,
    },
  }, {
    underscored: true,
    hooks: {
      beforeCount(options: any) {
        options.raw = true;
      }
    }
  });

  // eslint-disable-next-line no-unused-vars
  (companies as any).associate = function (models: any) {
    (companies as any).hasMany(models.users);
    (companies as any).hasMany(models.patients);
  };

  return companies;
}

И функция включения

function getSuperAdmin() {
  return (context: HookContext) => {
    const sequelizeClient = context.app.get("sequelizeClient");
      context.params.sequelize = {
        include: [
          {
            model: sequelizeClient.models.users,
            as: 'users',
            required: false,
            where: {
              '$users.role$': 'super_admin'
            }
          }
        ],
      };
      return context;
  }
}

Когда я включаю модель компаний в пользовательский запрос, она работает правильно. Но не наоборот. Есть идеи?

Спасибо

...