Как использовать модель правильным способом — сиквелировать с помощью машинописного текста

#sql #typescript #sequelize.js #sequelize-typescript

Вопрос:

Вот моя модель продолжения —

 import { BuildOptions, DataTypes, Model, Sequelize } from "sequelize";

import { IDBUserAttributes } from "./shared/db-table";

    interface UserModel extends Model<IDBUserAttributes>, IDBUserAttributes {}
    
    class User extends Model<UserModel, IDBUserAttributes> {}
    
    type UserStatic = typeof Model amp; {
      new (values?: object, options?: BuildOptions): UserModel;
    };
    
    const UserFactory = (sequelize: Sequelize): UserStatic => {
      return <UserStatic>sequelize.define("users", {
        id: {
          type: DataTypes.INTEGER.UNSIGNED,
          autoIncrement: true,
          primaryKey: true,
          unique: true,
          allowNull: false,
        },
        email: {
          type: DataTypes.STRING(320),
          allowNull: false,
          unique: true,
        },
        username: {
          type: DataTypes.STRING(26),
          allowNull: false,
        },
        password: {
          type: DataTypes.STRING(255),
          allowNull: false,
        },
        createdAt: {
          type: DataTypes.DATE,
          allowNull: false,
          defaultValue: DataTypes.NOW,
        },
        updatedAt: {
          type: DataTypes.DATE,
          allowNull: false,
          defaultValue: DataTypes.NOW,
        },
      });
    }
    
    export {
      UserModel,
      User,
      UserFactory,
      UserStatic,
    }
 

Я хочу использовать модель в контроллерах. Например, вот так —
User.create() или любым другим способом.

Как я могу получить модель? ………………………………………………………………………………………………………………………………..

Ответ №1:

Я думаю, что вы смешиваете sequelize js и sequelize ts. Я никогда не использовал sequelize с ванильным js, но я думаю, что вам не нужен пользовательский интерфейс. Класса должно быть достаточно, чтобы создать экземпляр вашей модели и создать ее.

Простой класс должен выглядеть примерно так :

 @Table({ modelName: 'users' })
export class UserModel extends Model {
  @Column({ primaryKey: true, allowNull: false, autoIncrement: true, type: DataTypes.INTEGER })
  idUser: number;

  @Column({ type: DataTypes.STRING })
  firstName: string;

  @Column({ type: DataTypes.STRING })
  lastName: string;
}
 

Вы можете описать все свои столбцы как свойства своего класса с помощью столбца @и указать некоторые параметры для этой аннотации.

Затем вам просто нужно импортировать (или внедрить в зависимости от вашей платформы) в свой код, и вы сможете использовать все методы класса.

В моем случае это будет выглядеть так

 UserModel.create(params)
 

Для получения более подробной информации вы можете найти документ здесь:
https://github.com/RobinBuschmann/sequelize-typescript#model-definition