我有一个名为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);
});
有关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 }
答案 0 :(得分:1)
找到这篇文章,使我能够弄清楚与续集对象相关的魔术方法。
简而言之,您可以在sequelize对象上使用以下代码来获取其魔术方法。
console.log(Object.keys(sequelizeObject.__proto__));