Обработка MySQL двоичных полей UUID в Sequelize - PullRequest
0 голосов
/ 02 апреля 2020

В 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, ...]
    },
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...