问题描述
这是我尝试使用sequelize完成此简单任务的第三天,但我却很难。
我要创建的表包含两个字段:
- id(类型:int)
- publicId(类型:uuid)
id字段是主键,自动递增等。
publicId字段应为UUID类型,其值应由“ defaultValue”属性自动 自动 生成。
创建表时,我在创建模型或迁移文件时尝试了各种组合。同步也不是问题,因为每次我删除数据库容器时,都会生成一个新的容器并再次迁移。
我正在使用sequelize-cli v5.5.1,但我也尝试了v6.2。
代码:
(迁移文件)
'use strict';
module.exports = {
up: (queryInterface,Sequelize) => {
return queryInterface.createTable('orders',{
id: {
allowNull: false,autoIncrement: true,primaryKey: true,type: Sequelize.INTEGER
},publicId: {
type: Sequelize.UUID,allowNull: false,unique: true,defaultValue: Sequelize.UUIDV4,}
});
},down: (queryInterface,Sequelize) => {
return queryInterface.dropTable('orders');
}
};
模型文件:
'use strict';
module.exports = (sequelize,DataTypes) => {
const order = sequelize.define('order',{
},{});
order.associate = function(models) {
// associations can be defined here
};
return order;
};
迁移已成功运行,但是只有“ id”字段设置了默认值。 publicId字段仅具有非null约束,并且不会创建默认值。
我尝试了许多其他方法,例如将一个函数设置为返回uuid的defaultValue,已经尝试过Sequelize.fn('uuid_generate_v4')
等。.defaultValues字段似乎不起作用。
解决方法
也尝试将新列添加到模型文件中,并指定属性选项。
顺便说一句-我总是关闭严格模式,因为它给了我奇怪的问题。