Num*_*ter 2 postgresql orm node.js sequelize.js graphql
我尝试通过使用sequelize创建数据库模型,但是我面临模型主键的问题。
我在Docker容器中使用Postgres(v10),并为模型隔离(Node.js v10.1.0)和为请求处理的GraphQL(0.13.2)+ GraphQL-Sequalize(8.1.0)。
通过sequelize-cli创建模型后,我手动尝试用uuid替换id列。这是我正在使用的模型迁移。
'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');
}
};
Run Code Online (Sandbox Code Playgroud)
模型:
'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;
};
Run Code Online (Sandbox Code Playgroud)
由于某些问题,sequalize执行下一个表达式:
执行(默认):从“货币”中选择“ id”,“ uuid”,“名称”,“ ticker”,“ alt_tickers”,“ createdAt”,“ updatedAt”作为“货币”,按“货币”排序ASC;
这导致“列'id'不存在”错误。
另外,我尝试通过在迁移时将uuid列重命名为id来解决此问题:
...
id: {
allowNull: false,
primaryKey: true,
type: Sequelize.UUID,
defaultValue: Sequelize.UUIDV4()
},
...
Run Code Online (Sandbox Code Playgroud)
在模型上:
'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;
};
Run Code Online (Sandbox Code Playgroud)
但是结果是程序启动时出现以下错误:
错误:名为“ id”的列已添加到“货币”的属性中,但未标记为“ primaryKey:true”
提前致谢!
这几乎是我在网上找到的唯一资源,它解释了如何设置数据库为其提供默认值的 UUID 列,而不依赖第三方uuid
npm 包:https ://krmannix.com/2017/ 05/23/postgres-autogenerated-uuids-with-sequelize/
精简版:
defaultValue
:Sequelize.literal( 'uuid_generate_v4()' )
您尚未在此处发布的是您的model
代码。我认为这就是发生的事情
id
为uuid
。因此,查询正在搜索id
和uuid
。
您可以uuid
像下面那样在模型中修复我的定义,并将其作为主键
const User = sequelize.define('user', {
uuid: {
type: Sequelize.UUID,
defaultValue: Sequelize.UUIDV1,
primaryKey: true
},
username: Sequelize.STRING,
});
sequelize.sync({ force: true })
.then(() => User.create({
username: 'test123'
}).then((user) => {
console.log(user);
}));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4059 次 |
最近记录: |