我正在尝试在我的postgresql模型中创建一个名为“ provider”的属性,并将其数据类型设置为Object(请参见下面的代码)。但是,我收到了错误Error: Unrecognized datatype for attribute "segment.provider"
。
我假设发生此错误,因为我尚未指定“ 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;
}
模型(表)上定义的每个字段都映射到数据库的列中。这就是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;
}