Я не думаю, что моя проблема самая сложная, но я уже некоторое время не могу добиться какого-либо прогресса в ее решении.
Я использую секвелизацию с машинописным текстом в своем бэкэнде и хочу создать ассоциации между таблицами/моделями (многие-ко-многим/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
}






Вам необходимо явно объявить такие «волшебные» методы, используя предоставленные интерфейсы миксинов из Sequelize (см. упомянутую вами ссылку):
declare getEmployees: BelongsToManyGetAssociationsMixin<Emplyee>;
Спасибо за Ваш ответ! После определения этого метода код сначала кажется правильным. Но после выполнения этой строки кода пишет: await Task.getEmployees() // Ошибка после выполнения: Task.getEmployees не является функцией
Вы проверяли во время выполнения, какие методы на самом деле есть у task?
Привет, ты решил проблему?