我使用以下命令通过Sequelize CLI创建一个DB模型:
sequelize model:create --name User --attributes "firstname:string, lastname:string"
这将创建相应的迁移脚本:
'use strict';
module.exports = {
up: function(queryInterface, Sequelize) {
return queryInterface.createTable('Users', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
firstname: {
type: Sequelize.STRING
},
lastname: {
type: Sequelize.STRING
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: function(queryInterface, Sequelize) {
return queryInterface.dropTable('Users');
}
};
如图所示,主键设置为integer
。
有没有办法默认命令行界面改用UUID
?
发布于 2019-11-16 04:39:51
您可以简单地使用Sequelize附带的UUIDV4类型。以下是更多详细信息:UUIDV4
例如,做出这样的定义:
id: {
type: Sequelize.UUID,
defaultValue: Sequelize.UUIDV4,
allowNull: false,
primaryKey: true
}
这不是使用序列化的命令行界面,但您可以通过手动更改来使用该原生UUIDV4。
发布于 2017-07-16 19:32:30
您必须手动编辑生成的文件,将Sequelize.INTEGER
更改为Sequelize.UUID
,然后删除autoIncrement: true
。
npm install uuid
因此,您的模型将如下所示:
const uuid = require('uuid/v4'); // ES5
'use strict';
module.exports = {
up: function(queryInterface, Sequelize) {
return queryInterface.createTable('Users', {
id: {
allowNull: false,
primaryKey: true,
type: Sequelize.UUID
},
/* Other model properties */
});
},
down: function(queryInterface, Sequelize) {
return queryInterface.dropTable('Users');
}
};
按如下方式更新您的beforeCreate
挂钩:
const uuid = require('uuid/v4');
export default (sequelize, DataTypes) => {
const User = sequelize.define('User', {
id: {
allowNull: false,
primaryKey: true,
type: Sequelize.UUID
},
...
}, {});
User.beforeCreate(user => user.id = uuid());
return User;
};
假设您使用的是Sequelize v4。
发布于 2018-08-30 20:49:08
最后一个答案将不起作用,因为uuid()
函数将为数据库中的所有用户设置唯一的默认值。因为它们是一个primaryKey,所以您只能在数据库中持久化一个用户,然后每个人都将收到相同的UUID值,当然,也不会被持久化。
所以..。您必须:
在您的迁移文件中,删除uuid并将id的类型从type: Sequelize.UUID
npm i uuid --save
autoIncrement: true,
更改为type: Sequelize.INTEGER
,更改beforeCreate
函数以在将其插入数据库之前生成新的uuid,如下所示:const uuid = require('uuid/v4');/*...*/ module.exports = (sequelize,DataTypes) => { const User = sequelize.define(' User ',{ /* Your User Model Here */ },{});User.beforeCreate((user,_) => {/* user.id = uuid();});return User;};通过执行以下操作,
sequelize db:migrate:undo
,然后单击sequelize db:migrate
https://stackoverflow.com/questions/40734263
复制相似问题