@D_E_S

Как в sequelize Model использовать VIRTUAL с get и set?

Добрый день. Есть подключение запросы работают. Не могу понять что не так с данными. Таблица users уже была написана, в ней нет acl есть только pageaccess в виде строки. Проблема что если смотреть дебаг во время формирования то acl выходит с верными данными но если после смотреть ures то acl хранит неверные данные. В какой момент вызывается acl и надо ли делать map чтобы получить массив со всеми данными?
Запрос:
let ures = await Users.findAll({ where: {deleted: '0'}}).then(function (items) {
                    return items.map(x=>{
                        var item = x.dataValues;
                        item.acl = x.acl;
                        return item;
                    });
                });

Модель:
var Table:UserModel = ORM.define('users', {
    id: {
        type: DataTypes.UUID,
        primaryKey: true,
        autoIncrement: true
    },
    acl: {
        allowNull: false,
        type: DataTypes.VIRTUAL,
        get: function () {
            var pageaccess = this.getDataValue('pageaccess');
            var result = defaultObject;
            if (!pageaccess || pageaccess == 'null'){
                defaultOk.forEach(k => result[k] = true);
            } else {
                pageaccess.split(/,/).forEach(x => result[x] = true);
                return result;
            }
        },
        set: function (val) {
            var acl = val;
            var pageaccess = Object.keys(acl).filter(k=>acl[k]).join(',');
            this.setDataValue('pageaccess', pageaccess);
        }
    },
    pageaccess: {
        type: DataTypes.STRING,
    },
    deleted: {
        type: DataTypes.INTEGER,
    }
},{
    getterMethods   : {},
    setterMethods   : {},
    classMethods: {
        setAcl: function(key: string, value: boolean) {
            if (!this._acl) var q = this.acl;
            this._acl[key] = value;
            this.pageaccess = Object.keys(this._acl).filter(k=>this._acl[k]).join(',');
        }
});

export var Users = Table;
  • Вопрос задан
  • 414 просмотров
Пригласить эксперта
Ответы на вопрос 1
@emp1re
let ures = await Users.findAll({ where: {deleted: '0'}}).then(function (items) {
                    return items.map(x=>{
                        var item = x.dataValues;
                        item.acl = x.acl;
                        return item;
                    });
                });

Users.findAll({ where: {deleted: '0'}}) возращает промисс котрый вы обрабатываете через then
все что вы внутри питаетесь вернуть никуда не вернеться.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы