我有一个sequelize查询来自多个表内连接在一起。我需要在嵌套的include
模型上对它们进行分组,但是sequelize查询每次都会抛出主键,即使我将属性提到:attributes:[]
。
但是attributes:[]
适用于嵌套的include
模型。
答案 0 :(得分:3)
您可以通过将exclude
数组传递到attributes
选项来排除任何属性:
MyModel.findAll({
attributes: {exclude: ['some_field']}
});
答案 1 :(得分:1)
我想补充一点,你可以明确列出你想要的属性,以及它们在嵌套的内连接上的工作方式如下:
const my_model = await MyModel.findById(id, {
include: [
{
model: AnotherModel,
attributes: [ 'displayName', 'email' ] // only these attributes returned
},
{ model: YetAnotherModel,
include: [{
model: AnotherModel,
attributes: [ 'id', 'displayName', 'email' ]
}]
}
]
})
您返回的对象应如下所示:
{
// ...MyModel attributes
,
AnotherModel: {
displayName: '...',
email: '...',
},
YetAnotherModel: {
// ...YetAnotherModel's attributes
,
AnotherModel: {
id: '...',
displayName: '...',
email: '...',
}
}
}
答案 2 :(得分:0)
对于随附的型号,请使用attributes: ['prop_name']
记住include
/ exclude
不会影响嵌套表的使用through: { attributes:[]}
Model.addScope('scope_name', {
attributes: ['id', 'name'],
include: [
{
model: models.role,
as: 'roles',
attributes: ['name'],
through: {
attributes: []
}
}
]
更多详细信息可以在这里找到:https://github.com/sequelize/sequelize/issues/4074#issuecomment-153054311