Я работаю над проектом экспресс сиквелиза.
У меня проблема с sequelize.
У меня есть простая схема, как в документации сказано:
class Task extends Model {}
Task.init({ title: Sequelize.STRING }, { sequelize, modelName: 'task' });
class User extends Model {}
User.init({ username: Sequelize.STRING }, { sequelize, modelName: 'user' });
User.hasMany(Task); // Will add userId to Task model
Task.belongsTo(User); // Will also add userId to Task model
Но когда я запрашиваю с помощью include
sequelize.models['task'].findAll({include:[{all:true}]});
Я сталкиваюсь с некоторыми проблемами:
Первый:
this._getIncludedAssociation is not a function
Вот исходный код github: https://github.com/sequelize/sequelize/blob/master/lib/model.js#L615
Я просто изменяю this
на Model
, чтобы проверить.
Эта ошибка исчезла, но появляется вторая (связана с первой, потому что я изменил поведение)
User is not associated to Model
Но стоит сказать User is not associated to Task
(Github ошибки: https://github.com/sequelize/sequelize/blob/master/lib/model.js#L711)
Это похоже на то, что класс Model не был инстанцирующим ...
Что может быть плохого в моем коде? Может быть, факт, чтобы назвать модель по sequelize.models[modelName]
?? Я с этим долго борюсь ...
Спасибо.
Больше информации:
Версия Sequelize : ^ 5.7.0
Архитектура :
При запуске приложения все мои модели сохраняются в пользовательском классе базы данных, хранящемся в моем процессе.
Внутри любого контроллера я вызываю класс репозитория с примером метода, подобного следующему, где требуемая модель доступна через this.model
:
findAll(options, force = false) {
let data = this.performExtraOptions(options);
data.paranoid = force;
if (this.isDebug) {
this.req.debug.addDatabaseCall('Table ' + this.model.getTableName() + ' findAll', data);
}
return this.model.findAll(data);
}
Когда я проверяю с помощью Chrome Debugger, модель выглядит так:
const model = class extends Model {};