我在sequalize中遇到了主键为uuid的实现模型的问题。我一步一步地遵循所有的指示,但仍然无法解决它。
我的模型是这样的:
'use strict';
module.exports = (sequelize, DataTypes) => {
var Todo = sequelize.define('Todo', {
title: DataTypes.STRING,
description: DataTypes.STRING,
test: DataTypes.UUID
}, {});
Todo.associate = function(models) {
// associations can be defined here
};
return Todo;
};
和迁移文件:
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('Todos', {
id: {
primaryKey: true,
type: Sequelize.UUID,
defaultValue: Sequelize.UUIDV1
},
title: {
type: Sequelize.STRING
},
description: {
type: Sequelize.STRING
},
test: {
type: Sequelize.UUID,
defaultValue: Sequelize.UUIDV4
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('Todos');
}
};
调用post方法创建元素后,在id列中得到一个空值,在test列中得到null。。。
数据库是mysql。
还有别的办法吗?
2条答案
按热度按时间rn0zuynd1#
确保package.json更新了uuid模块,这就是我的问题所在。
这很好,只要确保package.json
gpnt7bae2#
1) 在sequelize中设置自定义键
我在sequalize中遇到了主键为uuid的实现模型的问题。
默认情况下,如果您的模型不包含
primaryKey: true
,那么sequelize
假定pk类型为INTEGER
命名id
.在你的情况下,似乎你想让自己的定制pk。
在模型中使用以下选项:
2) 验证
调用post方法创建元素后,在id列中得到一个空值,在test列中得到null。。。
如果没有太多的信息,不仅是关于你的查询,而且是关于你是如何播种数据库的,很难具体回答。
然而,我并不惊讶
test
列为null
,因为您尚未列出任何验证。因此,如果您对未设置test
价值,它将是null
.要创建验证,请执行以下操作
型号:
迁移:
3) 保持模型和迁移同步
(见:https://stackoverflow.com/a/49796801/8954866)在
sequelize
,模型和迁移不会自动彼此同步,除非最初使用sequelize-cli model:generate
. 我不确定您是运行了迁移,还是在针对模型的单元测试中运行了查询。但你必须确保它们是同步的。一个主要的例子是,在上述情况下,您的迁移id
属于类型UUID
但你的模特会认为这是INTEGER
.参考文献
设置自定义主键
验证和分配