CNode

多表关联为何sequelize 的 attributes不生效?

问答
Qqingmingsang发布于10 年前最后回复9 年前13 回复7033 浏览0 收藏

有 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-02T09:43:07.714Z,
    'userRole.updatedAt': 2016-09-02T09:43:07.714Z,
    'userRole.userId': 1,
    'userRole.roleId': 1 
}

看文档也没找到解决的办法 http://docs.sequelizejs.com/en/v3/

查看回复

回复 (13)

F
fyibmsd#1·10 年前

model里是不是定义了get function

M
mosaic101#2·10 年前

联表查询,用include

S
simdm#3·10 年前

定义时用hasMany 查询用include

Q
qingmingsang#4·10 年前
引用 mosaic101联表查询,用include

@mosaic101 include 和他有关联的表是怎么查?

Q
qingmingsang#5·10 年前
引用 simdm定义时用hasMany 查询用include

@simdm

include 和他有关联的表是怎么查?

S
simdm#6·10 年前
引用 qingmingsang@simdm include 和他有关联的表是怎么查?

@qingmingsang 文档写的很详细,看看就懂了

Q
qingmingsang#7·10 年前
引用 simdm@qingmingsang 文档写的很详细,看看就懂了

@simdm

		A.findAll({
            include: [{
                model: B
            }]
        });

不知为何查不到

S
simdm#8·10 年前
引用 qingmingsang@simdm 不知为何查不到

@qingmingsang

你定义实体的时候,关系建立了么

J
jiapeiyang#10·9 年前

你好,你这个问题解决了吗,我也遇到同样的问题

Q
qingmingsang#11·9 年前
引用 jiapeiyang你好,你这个问题解决了吗,我也遇到同样的问题

@jiapeiyang

似乎是打印和输出到body里的数据有差异

J
jiapeiyang#12·9 年前
引用 qingmingsang@jiapeiyang 似乎是打印和输出到body里的数据有差异

@qingmingsang 这个问题我解决了,我在sequelize的github下的issue下,官方的回答是,多对多关系时用belongstomany通过attributes去除关系表的数据清除不了,这个一个bug,要在sequelize第四个版本修复。我现在是通过hasMany和belong来建立多对多关系的,完美解决现在的问题

Q
qingmingsang#13·9 年前
参与回复
登录后即可参与回复。登录