【问题标题】:Unrecognized datatype in Sequelize ModelSequelize 模型中无法识别的数据类型
【发布时间】:2020-05-14 11:55:22
【问题描述】:

我正在尝试在我的 postgresql 模型中创建一个名为“provider”的属性,并将其数据类型设为对象(参见下面的代码)。但是,我收到错误Error: Unrecognized datatype for attribute "segment.provider"

我假设这个错误正在发生,因为我没有指定“提供者”属性的数据类型实际上是什么(即: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;
}

【问题讨论】:

    标签: node.js database postgresql sequelize.js


    【解决方案1】:

    模型(表)上定义的每个字段都映射到数据库中的一列。
    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;
    }
    

    【讨论】:

      猜你喜欢
      • 2016-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多