В MySQL 8.x были представлены три новые функции, которые упрощают и улучшают поддержку работы с UUID.
Итак, я использую этот вид в моей схеме секвелизации:
const Sequelize = require("sequelize");
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define('user', {
id: { type: DataTypes.UUID, primaryKey: true, autoIncrement: false , defaultValue: Sequelize.UUIDV4},
username: { type: DataTypes.STRING, allowNull: false },
password: { type: DataTypes.STRING, allowNull: false },
name: { type: DataTypes.STRING, allowNull: false },
email: { type: DataTypes.STRING, allowNull: false },
role_id: { type: DataTypes.INTEGER.UNSIGNED, allowNull: false },
tenant_id: { type: DataTypes.INTEGER.UNSIGNED, allowNull: false },
status: { type: DataTypes.INTEGER.UNSIGNED, allowNull: false },
updated_at: { type: DataTypes.DATE, allowNull: true },
created_at: { type: DataTypes.DATE, allowNull: false },
}, {
timestamps: false,
freezeTableName: true,
});
return User;
};
MySQL DDL:
CREATE TABLE IF NOT EXISTS `ap`.`user` (
`id` BINARY(16) NOT NULL,
`name` VARCHAR(100) NULL,
`username` VARCHAR(20) NULL,
`password` VARCHAR(200) NULL,
`email` VARCHAR(255) NULL,
`status` TINYINT(1) NULL,
`updated_at` TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
`created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
`tenant_id` BINARY(16) NOT NULL,
PRIMARY KEY (`id`),
INDEX `fk_user_tenant1_idx` (`tenant_id` ASC),
CONSTRAINT `fk_user_tenant1`
FOREIGN KEY (`tenant_id`)
REFERENCES `ap`.`tenant` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
Учитывая, что id
хранит двоичный файл UUID, как я могу отфильтровать записи в моих запросах?
Не работает (пользователь = ноль, поскольку запись не найдена):
let user = await User.findOne({
where: {
id: myVar.data, // myVar = Array(16) [217, 35, 74, ...]
},
});