Как получить доступ к методам доступа в sequelize - PullRequest
0 голосов
/ 10 октября 2018

У меня есть модель с именем user, модель с именем access_barrier и таблица соединений между user и access_barrier с именем barrier_users.

. Я создал для них следующие ассоциации

user.belongsToMany(models.access_barrier, {
  as: "access_barriers_accessible",
  through: "barrier_users",
  foreignKey: "userId",
  onUpdate: "CASCADE",
  onDelete: "CASCADE"
});

access_barrier.belongsToMany(models.user, {
  as: "users_with_permission",
  through: "barrier_users",
  foreignKey: "barrierId",
  onUpdate: "CASCADE",
  onDelete: "CASCADE"
});

При запросе пользователей с помощью следующего кода я вижу, что все данные в порядке.

return models.user
    .findAll({
        include: [
          {
            model: models.access_barrier,
            as: "access_barriers_accessible"
          }
        ]
    })
    .then(function(result) {
        resolve(result);
    })
    .catch(models.Sequelize.DatabaseError, function() {
        reject("An error occurred in the database");
    })
    .catch(function(err) {
        reject(err);
    });

В документации по сиквелизу упоминается, что методы доступа создаются при использовании вышеуказанных функций.как упомянуто ниже

Project.belongsToMany(User, {through: 'UserProject'});

User.belongsToMany(Project, {through: 'UserProject'});

Это создаст новую модель с именем UserProject с эквивалентными внешними ключами projectId и userId.Независимо от того, являются ли атрибуты верблюжьим или нет, зависит от двух моделей, объединенных в таблицу (в данном случае - «Пользователь» и «Проект»).Sequelize ранее пытался автоматически генерировать имена, но это не всегда приводило бы к наиболее логичным установкам.

Это добавит методы getUsers, setUsers, addUser, addUsers в Project и getProjects, setProjects, addProject и addProjects для пользователя..

Как узнать имена методов, добавленные для моих моделей, где именно я могу их просмотреть?Как мне получить к ним доступ?

Я использовал Object.keys(models.user) и получил данные ниже

[ 'sequelize',
  'options',
  'associations',
  'underscored',
  'tableName',
  '_schema',
  '_schemaDelimiter',
  'rawAttributes',
  'primaryKeys',
  '_timestampAttributes',
  '_readOnlyAttributes',
  '_hasReadOnlyAttributes',
  '_isReadOnlyAttribute',
  '_dataTypeChanges',
  '_dataTypeSanitizers',
  '_booleanAttributes',
  '_dateAttributes',
  '_hstoreAttributes',
  '_rangeAttributes',
  '_jsonAttributes',
  '_geometryAttributes',
  '_virtualAttributes',
  '_defaultValues',
  'fieldRawAttributesMap',
  'fieldAttributeMap',
  'uniqueKeys',
  '_hasBooleanAttributes',
  '_isBooleanAttribute',
  '_hasDateAttributes',
  '_isDateAttribute',
  '_hasHstoreAttributes',
  '_isHstoreAttribute',
  '_hasRangeAttributes',
  '_isRangeAttribute',
  '_hasJsonAttributes',
  '_isJsonAttribute',
  '_hasVirtualAttributes',
  '_isVirtualAttribute',
  '_hasGeometryAttributes',
  '_isGeometryAttribute',
  '_hasDefaultValues',
  'attributes',
  'tableAttributes',
  'primaryKeyAttributes',
  'primaryKeyAttribute',
  'primaryKeyField',
  '_hasPrimaryKeys',
  '_isPrimaryKey',
  'autoIncrementAttribute',
  '_scope',
  '_scopeNames',
  'associate' ]

При проверке, что associations имеет

{ access_barriers_incharge: access_barriers_incharge,
  access_barriers_admin: access_barriers_admin,
  admin: admin,
  access_barriers_accessible: access_barriers_accessible,
  barriers_accessed: barriers_accessed }

1 Ответ

0 голосов
/ 17 октября 2018

Нашел эту статью, которая позволила мне выяснить, какие магические методы связаны с объектом продолжения.

Короче говоря, вы можете использовать следующий код для объекта сиквелиза, чтобы получить его магические методы.

console.log(Object.keys(sequelizeObject.__proto__));

Чувство магии с помощью методов сиквелизации магии

...