【发布时间】:2018-10-29 02:33:13
【问题描述】:
我尝试使用 sequelize 创建数据库模型,但我遇到了模型主键的问题。
设置
我在 docker 容器中使用 Postgres (v10) 和 sequalize (Node.js v10.1.0 ) 用于模型和 GraphQL (0.13.2) + GraphQL-Sequalize (8.1.0) 用于请求处理。
问题
通过 sequelize-cli 创建模型后,我手动尝试将 id 列替换为 uuid。这是我正在使用的模型迁移。
'use strict';
const DataTypes = require('sequelize').DataTypes;
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('Currencies', {
uuid: {
primaryKey: true,
type: Sequelize.UUID,
defaultValue: DataTypes.UUIDV4,
allowNull: false
},
name: {
type: Sequelize.STRING
},
ticker: {
type: Sequelize.STRING
},
alt_tickers: {
type: Sequelize.ARRAY(Sequelize.STRING)
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('Currencies');
}
};
型号:
'use strict';
module.exports = (sequelize, DataTypes) => {
const Currency = sequelize.define('Currency', {
uuid: DataTypes.UUID,
name: DataTypes.STRING,
ticker: DataTypes.STRING,
alt_tickers: DataTypes.ARRAY(DataTypes.STRING)
}, {});
Currency.associate = function(models) {
// associations can be defined here
};
return Currency;
};
由于一些问题,sequalize 执行下一个表达式:
执行(默认):从“货币”中选择“id”、“uuid”、“name”、“ticker”、“alt_tickers”、“createdAt”、“updatedAt”作为“货币”按“货币”排序。 "id" ASC;
这会导致“列 'id' 不存在”错误。
或者,我尝试通过在迁移时将 uuid 列重命名为 id 来修复它:
...
id: {
allowNull: false,
primaryKey: true,
type: Sequelize.UUID,
defaultValue: Sequelize.UUIDV4()
},
...
在模型处:
'use strict';
module.exports = (sequelize, DataTypes) => {
const Currency = sequelize.define('Currency', {
id: DataTypes.INTEGER,
name: DataTypes.STRING,
ticker: DataTypes.STRING,
alt_tickers: DataTypes.ARRAY(DataTypes.STRING)
}, {});
Currency.associate = function(models) {
// associations can be defined here
};
return Currency;
};
但结果是程序开始时出现以下错误:
错误:名为“id”的列已添加到“货币”的属性中,但未标记为“primaryKey:true”
问题
- 那么,有没有办法强制 sequelize 使用 UUID 作为表主键而不定义 id 列?
- 有没有办法创建没有 id 列的列?
- 可能导致此错误的原因以及应如何解决?
提前致谢!
【问题讨论】:
标签: node.js postgresql orm sequelize.js graphql