Нераспознанный тип данных в модели Sequelize - PullRequest
0 голосов
/ 29 января 2020

Я пытаюсь создать атрибут «поставщик» в моей модели postgresql и сделать его тип данных объектом (см. Код ниже). Однако я получаю ошибку Error: Unrecognized datatype for attribute "segment.provider".

Я предполагаю, что эта ошибка происходит, потому что я не указал, какой тип данных у атрибута "provider" на самом деле (ie: type: DataTypes.OBJECT). Насколько мне известно, в документах Sequelize нет ничего, что могло бы продемонстрировать мою просьбу. Любая помощь будет очень цениться. Спасибо!

module.exports = (sequelize, DataTypes) => {
  const Segment = sequelize.define(
    'segment',
    {
      id: {
        type: DataTypes.INTEGER,
        autoIncrement: true,
        primaryKey: true
      },
      provider: {
        providerName: DataTypes.STRING,
        externalId: DataTypes.STRING,
        email: DataTypes.STRING,
        privacyPolicy: DataTypes.STRING
      }
    },
    {
      freezeTableName: true,
      tableName: 'segment'
    }
  );

  return Segment;
}

1 Ответ

0 голосов
/ 29 января 2020

Каждое поле, определенное в модели (таблице), отображается в столбце базы данных.
Это то, что в основном делает sequelize.

Теперь, есть ли поле в PostgreSQL база данных, которая является объектом?

Для того, что вы пытаетесь сделать, вам просто нужно использовать ассоциации между таблицами.
Создать новую модель (таблицу) с именем provider:

И добавьте ассоциации в следующем примере:

module.exports = (sequelize, DataTypes) => {
  const Provider = sequelize.define(
    'provider',
    {
      id: {
          type: DataTypes.INTEGER,
          autoIncrement: true,
          primaryKey: true
      },
      name: {
          type: DataTypes.STRING
      },
      email: {
          type: DataTypes.STRING
      },
      privacyPolicy: {
          type: DataTypes.STRING
      }
    },
    {
      freezeTableName: true,
      tableName: 'provider'
    }
  );

  // Apply the accosiation:
  Provider.hasMany /* or has one */ (Segment, {foreignKey: 'provider_id'});
  return Provider;
}

И в вашей модели Segment добавьте внешний ключ и ссылку на Provider

module.exports = (sequelize, DataTypes) => {
  const Segment = sequelize.define(
    'segment',
    {
      id: {
            type: DataTypes.INTEGER,
            autoIncrement: true,
            primaryKey: true
      },
      provider_id: {
          type: DataTypes.INTEGER,
          references: {
              model: 'provider',
              key: 'id
          }
      }
    },
    {
      freezeTableName: true,
      tableName: 'segment'
    }
  );

  // Apply the accosiation:
  Segment.belongsTo(Provider, {foreignKey: 'id'}); 
  return Segment;
}
...