如何以序列化方式访问访问器方法

时间:2018-10-10 11:09:44

标签: node.js postgresql express orm sequelize.js

我有一个名为user的模型和一个名为access_barrier的模型,以及一个在useraccess_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);
    });

有关sequelize的文档中提到,使用如下所述的上述功能时会创建访问器方法

  

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

     

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

     

这将创建一个具有等效外键projectId和userId的名为UserProject的新模型。属性是否为驼峰格式取决于表连接的两个模型(在这种情况下为User和Project)。

     

需要自定义。 Sequelize以前会尝试自动生成名称,但这并不总是导致最合理的设置。

     

这会将方法getUsers,setUsers,addUser,addUsers添加到Project,并将getProjects,setProjects,addProject和addProjects添加到User。

我如何知道为模型添加的方法名称,我在哪里可以查看它们?如何访问它们?

我使用了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 :(得分:1)

找到这篇文章,使我能够弄清楚与续集对象相关的魔术方法。

简而言之,您可以在sequelize对象上使用以下代码来获取其魔术方法。

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

Feeling The Magic with Sequelize Magic Methods