gpt4 book ai didi

mysql - 在 MySql 数据库中将 primaryKey 序列化为 UUID - 不工作

转载 作者:可可西里 更新时间:2023-11-01 07:29:39 26 4
gpt4 key购买 nike

我在使用主键作为 uuid 的 Sequalize 实现模型时遇到了问题。我一步一步地按照所有说明进行操作,但仍然无法解决。

这是我的模型的样子:

'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。

还有其他方法吗?

最佳答案

1)在Sequelize中设置自定义键

I'm facing the problem with implementation model in Sequalize with primary key as uuid.

默认情况下,如果您的模型包含具有primaryKey: true 的键,则sequelize 假定PK 类型为 INTEGER 名为 id

在您的情况下,您似乎希望制作自己的自定义 PK。

在您的模型中使用以下:

var Todo = sequelize.define('Todo', {
id: {
primaryKey: true,
type: DataTypes.UUID
}
// rest of properties
});

2) 验证

After calling post method to create element, I habe got an empty value in ID column, and NULL in test column...

不仅没有关于您的查询的太多信息,而且没有关于您如何播种数据库的信息,因此很难具体回答。

但是,test 列为 null 并不让我感到惊讶,因为您没有列出任何验证。因此,如果您播种/创建未设置 test 值的行,它将是 null

要创建验证,请执行以下操作

型号:

var Todo = sequelize.define('Todo', {
// rest of properties
test: {
allowNull: false
type: DataTypes.UUID,
validate: {
notNull: true
}
}
});

迁移:

queryInterface.createTable('Todos', {
// rest of properties
test: {
allowNull: false,
type: Sequelize.UUID,
defaultValue: Sequelize.UUIDV4
}
});

3) 保持模型和迁移同步

(参见:https://stackoverflow.com/a/49796801/8954866)在 sequelize 中,模型和迁移不会自动彼此同步,除非最初使用 sequelize-cli model:generate。我不确定您是否运行了迁移,或者您是否在针对模型的单元测试中运行了查询。但是你必须确保它们是同步的。一个主要示例是,在上述情况下,您的迁移说 idUUID 类型,但您的模型会认为它是 INTEGER 类型。

引用资料

关于mysql - 在 MySql 数据库中将 primaryKey 序列化为 UUID - 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49864723/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com