Sequelize.js 为什么Sequelize会创建一个名为';文本';而不是以模型attibute命名
为了使代码更具可读性,我创建了Sequelize.js 为什么Sequelize会创建一个名为';文本';而不是以模型attibute命名,sequelize.js,Sequelize.js,为了使代码更具可读性,我创建了consts来存储常用的列定义。当我选择使用这些常量时,它有一个奇怪的结果,即后端数据库在没有名为“text”的属性的情况下有一个“text”列,并且它没有正确存储数据 我想知道为什么 以下是我的常数: const-StringNullable={type:Sequelize.DataTypes.STRING};//注:默认值由GraphQL数据源设置。 const StringRequired={type:Sequelize.DataTypes.STRING,al
const
s来存储常用的列定义。当我选择使用这些常量时,它有一个奇怪的结果,即后端数据库在没有名为“text”的属性的情况下有一个“text”列,并且它没有正确存储数据
我想知道为什么
以下是我的常数:
const-StringNullable={type:Sequelize.DataTypes.STRING};//注:默认值由GraphQL数据源设置。
const StringRequired={type:Sequelize.DataTypes.STRING,allowNull:false};
下面是我认为定义Sequelize模型的两种等效方法:
const messages=sequelize.define('messages'){
deviceType:{type:Sequelize.DataTypes.STRING},
协议:{type:Sequelize.DataTypes.STRING},
源:{type:Sequelize.DataTypes.STRING},
dest:{type:Sequelize.DataTypes.STRING},
messageType:{type:Sequelize.DataTypes.STRING},
唯一标识:{type:Sequelize.DataTypes.UUID,allowNull:false},
操作:{type:Sequelize.DataTypes.STRING,allowNull:true},
有效负载:{type:Sequelize.DataTypes.TEXT},
managedBy:{type:Sequelize.DataTypes.STRING},
转发:{type:Sequelize.DataTypes.STRING(20),defaultValue:'No'},
已确认:{type:Sequelize.DataTypes.BOOLEAN},
状态:{type:Sequelize.DataTypes.STRING,defaultValue:“New”},
子状态:{type:Sequelize.DataTypes.STRING(22)},
});
const altMessages=sequelize.define('altMessages'{
设备类型:{…StringRequired},
协议:{…StringRequired},
来源:{…StringRequired},
目标:{…StringRequired},
消息类型:{…StringRequired},
唯一标识:{type:Sequelize.DataTypes.UUID,allowNull:false},
操作:Sequelize.DataTypes.STRING,
有效负载:Sequelize.DataTypes.TEXT,
managedBy:{…StringRequired},
转发:{type:Sequelize.DataTypes.STRING(20),defaultValue:'No'},
已确认:Sequelize.DataTypes.BOOLEAN,
状态:{…StringRequired,defaultValue:“New”},
子状态:Sequelize.DataTypes.STRING,
});
在我的模式中还有两个与消息模型具有外键关系的附加模型。这些键是使用messages表的.hasMany()
和.belongsTo
添加的,但我认为它们不相关,所以将它们忽略
我使用这段代码利用Sequelize的模式特性来说明两种模型的区别:
sequelize.sync({logging:false})
。然后((结果)=>{
console.log('Sync completed OK.Models:\r\n',result.Models');
返回messages.schema('messages');
})
。然后((结果)=>{
console.log(“消息”);
for(const key in result.fieldRawAttributesMap){
console.log(key,result.fieldrawattributemap[key]);
}
返回altMessages.schema('altMessages');
})
。然后((结果)=>{
console.log('altMessages:')
for(const key in result.fieldRawAttributesMap){
console.log(key,result.fieldrawattributemap[key]);
}
})
.catch((e)=>{
console.log(“同步失败”,e);
});
在sqlite上,altMessages在id字段后面包含一个文本
字段,用于存储状态
字段:
altMessages:
id {
type: INTEGER {
options: {},
_length: undefined,
_zerofill: undefined,
_decimals: undefined,
_precision: undefined,
_scale: undefined,
_unsigned: undefined
},
allowNull: false,
primaryKey: true,
autoIncrement: true,
_autoGenerated: true,
Model: altMessages,
fieldName: 'id',
_modelAttribute: true,
field: 'id'
}
text {
type: STRING {
options: { length: undefined, binary: undefined },
_binary: undefined,
_length: 255
},
allowNull: false,
Model: altMessages,
fieldName: 'status',
_modelAttribute: true,
field: 'text',
defaultValue: 'New'
}
另一方面,消息模型有一个离散的状态字段,按顺序排列,我希望它是:
status {
type: STRING {
options: { length: undefined, binary: undefined },
_binary: undefined,
_length: 255
},
defaultValue: 'New',
Model: messages,
fieldName: 'status',
_modelAttribute: true,
field: 'status'
}
以下是在sqlite和mariaDb上运行的代码的完整输出:
sqlite:
messages
id {
type: INTEGER {
options: {},
_length: undefined,
_zerofill: undefined,
_decimals: undefined,
_precision: undefined,
_scale: undefined,
_unsigned: undefined
},
allowNull: false,
primaryKey: true,
autoIncrement: true,
_autoGenerated: true,
Model: messages,
fieldName: 'id',
_modelAttribute: true,
field: 'id'
}
deviceType {
type: STRING {
options: { length: undefined, binary: undefined },
_binary: undefined,
_length: 255
},
Model: messages,
fieldName: 'deviceType',
_modelAttribute: true,
field: 'deviceType'
}
protocol {
type: STRING {
options: { length: undefined, binary: undefined },
_binary: undefined,
_length: 255
},
Model: messages,
fieldName: 'protocol',
_modelAttribute: true,
field: 'protocol'
}
source {
type: STRING {
options: { length: undefined, binary: undefined },
_binary: undefined,
_length: 255
},
Model: messages,
fieldName: 'source',
_modelAttribute: true,
field: 'source'
}
dest {
type: STRING {
options: { length: undefined, binary: undefined },
_binary: undefined,
_length: 255
},
Model: messages,
fieldName: 'dest',
_modelAttribute: true,
field: 'dest'
}
messageType {
type: STRING {
options: { length: undefined, binary: undefined },
_binary: undefined,
_length: 255
},
Model: messages,
fieldName: 'messageType',
_modelAttribute: true,
field: 'messageType'
}
uniqueId {
type: UUID {},
allowNull: false,
Model: messages,
fieldName: 'uniqueId',
_modelAttribute: true,
field: 'uniqueId'
}
action {
type: STRING {
options: { length: undefined, binary: undefined },
_binary: undefined,
_length: 255
},
allowNull: true,
Model: messages,
fieldName: 'action',
_modelAttribute: true,
field: 'action'
}
payload {
type: TEXT { options: { length: undefined }, _length: '' },
Model: messages,
fieldName: 'payload',
_modelAttribute: true,
field: 'payload'
}
managedBy {
type: STRING {
options: { length: undefined, binary: undefined },
_binary: undefined,
_length: 255
},
Model: messages,
fieldName: 'managedBy',
_modelAttribute: true,
field: 'managedBy'
}
forwarded {
type: STRING {
options: { length: 20, binary: undefined },
_binary: undefined,
_length: 20
},
defaultValue: 'No',
Model: messages,
fieldName: 'forwarded',
_modelAttribute: true,
field: 'forwarded'
}
confirmed {
type: BOOLEAN {},
Model: messages,
fieldName: 'confirmed',
_modelAttribute: true,
field: 'confirmed'
}
status {
type: STRING {
options: { length: undefined, binary: undefined },
_binary: undefined,
_length: 255
},
defaultValue: 'New',
Model: messages,
fieldName: 'status',
_modelAttribute: true,
field: 'status'
}
subStatus {
type: STRING {
options: { length: 22, binary: undefined },
_binary: undefined,
_length: 22
},
Model: messages,
fieldName: 'subStatus',
_modelAttribute: true,
field: 'subStatus'
}
createdAt {
type: DATE { options: { length: undefined }, _length: '' },
allowNull: false,
_autoGenerated: true,
Model: messages,
fieldName: 'createdAt',
_modelAttribute: true,
field: 'createdAt'
}
updatedAt {
type: DATE { options: { length: undefined }, _length: '' },
allowNull: false,
_autoGenerated: true,
Model: messages,
fieldName: 'updatedAt',
_modelAttribute: true,
field: 'updatedAt'
}
chargePointInstallId {
type: INTEGER {
options: {},
_length: undefined,
_zerofill: undefined,
_decimals: undefined,
_precision: undefined,
_scale: undefined,
_unsigned: undefined
},
allowNull: true,
references: { model: 'chargePointInstalls', key: 'id' },
onDelete: 'SET NULL',
onUpdate: 'CASCADE',
Model: messages,
fieldName: 'chargePointInstallId',
_modelAttribute: true,
field: 'chargePointInstallId'
}
waveInstallId {
type: INTEGER {
options: {},
_length: undefined,
_zerofill: undefined,
_decimals: undefined,
_precision: undefined,
_scale: undefined,
_unsigned: undefined
},
allowNull: true,
references: { model: 'waveInstalls', key: 'id' },
onDelete: 'SET NULL',
onUpdate: 'CASCADE',
Model: messages,
fieldName: 'waveInstallId',
_modelAttribute: true,
field: 'waveInstallId'
}
altMessages:
id {
type: INTEGER {
options: {},
_length: undefined,
_zerofill: undefined,
_decimals: undefined,
_precision: undefined,
_scale: undefined,
_unsigned: undefined
},
allowNull: false,
primaryKey: true,
autoIncrement: true,
_autoGenerated: true,
Model: altMessages,
fieldName: 'id',
_modelAttribute: true,
field: 'id'
}
text {
type: STRING {
options: { length: undefined, binary: undefined },
_binary: undefined,
_length: 255
},
allowNull: false,
Model: altMessages,
fieldName: 'status',
_modelAttribute: true,
field: 'text',
defaultValue: 'New'
}
uniqueId {
type: UUID {},
allowNull: false,
Model: altMessages,
fieldName: 'uniqueId',
_modelAttribute: true,
field: 'uniqueId'
}
action {
type: STRING {
options: { length: undefined, binary: undefined },
_binary: undefined,
_length: 255
},
Model: altMessages,
fieldName: 'action',
_modelAttribute: true,
field: 'action'
}
payload {
type: TEXT { options: { length: undefined }, _length: '' },
Model: altMessages,
fieldName: 'payload',
_modelAttribute: true,
field: 'payload'
}
forwarded {
type: STRING {
options: { length: 20, binary: undefined },
_binary: undefined,
_length: 20
},
defaultValue: 'No',
Model: altMessages,
fieldName: 'forwarded',
_modelAttribute: true,
field: 'forwarded'
}
confirmed {
type: BOOLEAN {},
Model: altMessages,
fieldName: 'confirmed',
_modelAttribute: true,
field: 'confirmed'
}
subStatus {
type: STRING {
options: { length: undefined, binary: undefined },
_binary: undefined,
_length: 255
},
Model: altMessages,
fieldName: 'subStatus',
_modelAttribute: true,
field: 'subStatus'
}
createdAt {
type: DATE { options: { length: undefined }, _length: '' },
allowNull: false,
_autoGenerated: true,
Model: altMessages,
fieldName: 'createdAt',
_modelAttribute: true,
field: 'createdAt'
}
updatedAt {
type: DATE { options: { length: undefined }, _length: '' },
allowNull: false,
_autoGenerated: true,
Model: altMessages,
fieldName: 'updatedAt',
_modelAttribute: true,
field: 'updatedAt'
}
并在Windows Server上的mariaDb上运行:
messages
id {
type: INTEGER {
options: {},
_length: undefined,
_zerofill: undefined,
_decimals: undefined,
_precision: undefined,
_scale: undefined,
_unsigned: undefined
},
allowNull: false,
primaryKey: true,
autoIncrement: true,
_autoGenerated: true,
Model: messages,
fieldName: 'id',
_modelAttribute: true,
field: 'id'
}
deviceType {
type: STRING {
options: { length: undefined, binary: undefined },
_binary: undefined,
_length: 255
},
Model: messages,
fieldName: 'deviceType',
_modelAttribute: true,
field: 'deviceType'
}
protocol {
type: STRING {
options: { length: undefined, binary: undefined },
_binary: undefined,
_length: 255
},
Model: messages,
fieldName: 'protocol',
_modelAttribute: true,
field: 'protocol'
}
source {
type: STRING {
options: { length: undefined, binary: undefined },
_binary: undefined,
_length: 255
},
Model: messages,
fieldName: 'source',
_modelAttribute: true,
field: 'source'
}
dest {
type: STRING {
options: { length: undefined, binary: undefined },
_binary: undefined,
_length: 255
},
Model: messages,
fieldName: 'dest',
_modelAttribute: true,
field: 'dest'
}
messageType {
type: STRING {
options: { length: undefined, binary: undefined },
_binary: undefined,
_length: 255
},
Model: messages,
fieldName: 'messageType',
_modelAttribute: true,
field: 'messageType'
}
uniqueId {
type: UUID {},
allowNull: false,
Model: messages,
fieldName: 'uniqueId',
_modelAttribute: true,
field: 'uniqueId'
}
action {
type: STRING {
options: { length: undefined, binary: undefined },
_binary: undefined,
_length: 255
},
allowNull: true,
Model: messages,
fieldName: 'action',
_modelAttribute: true,
field: 'action'
}
payload {
type: TEXT { options: { length: undefined }, _length: '' },
Model: messages,
fieldName: 'payload',
_modelAttribute: true,
field: 'payload'
}
managedBy {
type: STRING {
options: { length: undefined, binary: undefined },
_binary: undefined,
_length: 255
},
Model: messages,
fieldName: 'managedBy',
_modelAttribute: true,
field: 'managedBy'
}
forwarded {
type: STRING {
options: { length: 20, binary: undefined },
_binary: undefined,
_length: 20
},
defaultValue: 'No',
Model: messages,
fieldName: 'forwarded',
_modelAttribute: true,
field: 'forwarded'
}
confirmed {
type: BOOLEAN {},
Model: messages,
fieldName: 'confirmed',
_modelAttribute: true,
field: 'confirmed'
}
status {
type: STRING {
options: { length: undefined, binary: undefined },
_binary: undefined,
_length: 255
},
defaultValue: 'New',
Model: messages,
fieldName: 'status',
_modelAttribute: true,
field: 'status'
}
subStatus {
type: STRING {
options: { length: 22, binary: undefined },
_binary: undefined,
_length: 22
},
Model: messages,
fieldName: 'subStatus',
_modelAttribute: true,
field: 'subStatus'
}
createdAt {
type: DATE { options: { length: undefined }, _length: '' },
allowNull: false,
_autoGenerated: true,
Model: messages,
fieldName: 'createdAt',
_modelAttribute: true,
field: 'createdAt'
}
updatedAt {
type: DATE { options: { length: undefined }, _length: '' },
allowNull: false,
_autoGenerated: true,
Model: messages,
fieldName: 'updatedAt',
_modelAttribute: true,
field: 'updatedAt'
}
chargePointInstallId {
type: INTEGER {
options: {},
_length: undefined,
_zerofill: undefined,
_decimals: undefined,
_precision: undefined,
_scale: undefined,
_unsigned: undefined
},
allowNull: true,
references: { model: 'chargePointInstalls', key: 'id' },
onDelete: 'SET NULL',
onUpdate: 'CASCADE',
Model: messages,
fieldName: 'chargePointInstallId',
_modelAttribute: true,
field: 'chargePointInstallId'
}
waveInstallId {
type: INTEGER {
options: {},
_length: undefined,
_zerofill: undefined,
_decimals: undefined,
_precision: undefined,
_scale: undefined,
_unsigned: undefined
},
allowNull: true,
references: { model: 'waveInstalls', key: 'id' },
onDelete: 'SET NULL',
onUpdate: 'CASCADE',
Model: messages,
fieldName: 'waveInstallId',
_modelAttribute: true,
field: 'waveInstallId'
}
altMessages:
id {
type: INTEGER {
options: {},
_length: undefined,
_zerofill: undefined,
_decimals: undefined,
_precision: undefined,
_scale: undefined,
_unsigned: undefined
},
allowNull: false,
primaryKey: true,
autoIncrement: true,
_autoGenerated: true,
Model: altMessages,
fieldName: 'id',
_modelAttribute: true,
field: 'id'
}
text {
type: STRING {
options: { length: undefined, binary: undefined },
_binary: undefined,
_length: 255
},
allowNull: false,
Model: altMessages,
fieldName: 'status',
_modelAttribute: true,
field: 'text',
defaultValue: 'New'
}
uniqueId {
type: UUID {},
allowNull: false,
Model: altMessages,
fieldName: 'uniqueId',
_modelAttribute: true,
field: 'uniqueId'
}
action {
type: STRING {
options: { length: undefined, binary: undefined },
_binary: undefined,
_length: 255
},
Model: altMessages,
fieldName: 'action',
_modelAttribute: true,
field: 'action'
}
payload {
type: TEXT { options: { length: undefined }, _length: '' },
Model: altMessages,
fieldName: 'payload',
_modelAttribute: true,
field: 'payload'
}
forwarded {
type: STRING {
options: { length: 20, binary: undefined },
_binary: undefined,
_length: 20
},
defaultValue: 'No',
Model: altMessages,
fieldName: 'forwarded',
_modelAttribute: true,
field: 'forwarded'
}
confirmed {
type: BOOLEAN {},
Model: altMessages,
fieldName: 'confirmed',
_modelAttribute: true,
field: 'confirmed'
}
subStatus {
type: STRING {
options: { length: undefined, binary: undefined },
_binary: undefined,
_length: 255
},
Model: altMessages,
fieldName: 'subStatus',
_modelAttribute: true,
field: 'subStatus'
}
createdAt {
type: DATE { options: { length: undefined }, _length: '' },
allowNull: false,
_autoGenerated: true,
Model: altMessages,
fieldName: 'createdAt',
_modelAttribute: true,
field: 'createdAt'
}
updatedAt {
type: DATE { options: { length: undefined }, _length: '' },
allowNull: false,
_autoGenerated: true,
Model: altMessages,
fieldName: 'updatedAt',
_modelAttribute: true,
field: 'updatedAt'
}
有人能解释一下我是如何避免创建这个文本字段的,因为它的存在给我带来了很大的痛苦,因为我认为Sequelize会“正常工作”
提前谢谢