首页 文章

如何在sequelize中访问访问器方法

提问于
浏览
0

我有一个名为 user 的模型和一个名为 access_barrier 的模型以及一个名为 barrier_usersuser 和_2893395之间的连接表 .

我为他们创建了以下关联

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'});这将创建一个名为UserProject的新模型,其中包含等效的外键projectId和userId . 属性是否为camelcase取决于表连接的两个模型(在本例中为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

    找到这篇文章,让我弄清楚与续集对象有关的魔术方法 .

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

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

    Feeling The Magic with Sequelize Magic Methods

相关问题