myTable не связан с моделью - PullRequest
1 голос
/ 19 апреля 2019

Я работаю над проектом экспресс сиквелиза.

У меня проблема с 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 {};

enter image description here

1 Ответ

1 голос
/ 23 апреля 2019

Хорошо.

При чтении кода сиквела я обнаружил, что в алгоритме требуется options.model.

Проблема заключалась в том, что я отправил модель тоже в параметрах запроса, но в качестве имени модели (строка).

Алгоритм, преобразуйте option.model в качестве объекта экземпляра Model, чтобы сделать процесс.

Так что мне просто нужно переименовать мою переменную, переданную в качестве параметров запроса.

Эта строка кода была проблемой: https://github.com/sequelize/sequelize/blob/master/lib/model.js#L493

 if (!options.model) options.model = this;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...