多表关联为何sequelize 的 attributes不生效?
有 user表,role表,然后user和role建立了多对多的关系 代码是这样的
let user = await models.User.findOne({
where: {id: id},
attributes: ['name','id']
});
let roles = await user.getRoles({
attributes: ['name','id'],
raw: true
});
user和role数据都是能取到的,user 的 attributes也是生效的, 但是roles 的就不行了,role表本身的字段能过滤,但是不知道为什么一定会带上user与role 的关系数据
大概就是我想要的是这样的数据
{
id: 1,
name: '管理员'
}
却给了我这样的数据
{
id: 1,
name: '管理员',
'userRole.createdAt': 2016年09月02日T09:43:07.714Z,
'userRole.updatedAt': 2016年09月02日T09:43:07.714Z,
'userRole.userId': 1,
'userRole.roleId': 1
}
看文档也没找到解决的办法 http://docs.sequelizejs.com/en/v3/
13 回复
@qingmingsang 这个问题我解决了,我在sequelize的github下的issue下,官方的回答是,多对多关系时用belongstomany通过attributes去除关系表的数据清除不了,这个一个bug,要在sequelize第四个版本修复。我现在是通过hasMany和belong来建立多对多关系的,完美解决现在的问题