Секвелизация машинописного текста без методов ассоциации

Я не думаю, что моя проблема самая сложная, но я уже некоторое время не могу добиться какого-либо прогресса в ее решении.

В чем моя проблема?

Я использую секвелизацию с машинописным текстом в своем бэкэнде и хочу создать ассоциации между таблицами/моделями (многие-ко-многим/m:n). После создания этих ассоциаций кажется, что я не могу получить доступ к «магическим методам» (т. е. к методам, созданным секвенированием, чтобы упростить использование ассоциации).

// association between tasks and employees was defined

const task = await DB.Tasks.findByPk(1) 
// task.addEmployee() or such methods doesnt exist! 

Использование секвелизации v6.37.2

Что я пробовал?

Прежде чем мы перейдем к моему коду, я хотел бы сначала дать вам немного важной информации.

console.info(mymodel.associations) // works, no error  

вернет мою определенную асскотацию. Я также искал на GitHub репозиторий, который мог бы использовать структуру, аналогичную моей модели (официальный шаблон документации секвенирования), но безрезультатно. Я старался придерживаться официальной документации по секвелизации:

https://sequelize.org/docs/v6/other-topics/typescript/

Мой код

Вот одна из моих моделей (вторая имеет такую ​​же структуру):

// Task is a simple interface containing all attributes
export type TaskCreationAttributes = Optional<Task, "id">

export class TaskModel extends Model<Task, TaskCreationAttributes> {
    declare id: number
    declare name: string
    declare description: string
}

export default function (sequelize: Sequelize): typeof TaskModel {
    TaskModel.init(
        {
            id: {
                autoIncrement: true,
                primaryKey: true,
                type: DataTypes.INTEGER,
            },
            name: {
                allowNull: false,
                type: DataTypes.STRING(255),
            },
            description: {
                allowNull: true,
                type: DataTypes.TEXT,
            } 
        },
        {
            tableName: "tasks",
            sequelize,
        },
    )

    

    TaskModel.belongsToMany(EmployeeModel, { through: "task_positions"})
    EmployeeModel.belongsToMany(TaskModel, { through: "task_positions"})

    return TaskModel
}

Привет, ты решил проблему?

ImIGI 18.05.2024 13:08
Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Мне нравится библиотека Mantine Component , но заставить ее работать без проблем с Remix бывает непросто.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
TypeScript против JavaScript
TypeScript против JavaScript
TypeScript vs JavaScript - в чем различия и какой из них выбрать?
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Не все нужно хранить на стороне сервера. Иногда все, что вам нужно, это постоянное хранилище на стороне клиента для хранения уникальных для клиента...
Что такое ленивая загрузка в Angular и как ее применять
Что такое ленивая загрузка в Angular и как ее применять
Ленивая загрузка - это техника, используемая в Angular для повышения производительности приложения путем загрузки модулей только тогда, когда они...
0
1
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам необходимо явно объявить такие «волшебные» методы, используя предоставленные интерфейсы миксинов из Sequelize (см. упомянутую вами ссылку):

declare getEmployees: BelongsToManyGetAssociationsMixin<Emplyee>;

Спасибо за Ваш ответ! После определения этого метода код сначала кажется правильным. Но после выполнения этой строки кода пишет: await Task.getEmployees() // Ошибка после выполнения: Task.getEmployees не является функцией

Mx1co 04.04.2024 16:21

Вы проверяли во время выполнения, какие методы на самом деле есть у task?

Anatoly 04.04.2024 20:31

Другие вопросы по теме