我有一个sequelize查询从多个表内部连接在一起。我需要在嵌套的include模型上将它们分组,但sequelize查询每次都会抛出主键,即使我将属性指定为:attributes:[]。但是attributes:[]适用于嵌套的include模型。
include
attributes:[]
kmpatx3s1#
您可以通过将exclude数组传递到attributes选项中来排除任何属性:
exclude
attributes
MyModel.findAll({ attributes: {exclude: ['some_field']} });
kyks70gy2#
对于包含的型号,请使用attributes: ['prop_name']记住include/exclude不会影响使用through: { attributes:[]}的嵌套表
attributes: ['prop_name']
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
ny6fqffe3#
我想补充的是,你可以显式地列出你想要的属性,它们在嵌套的内部连接上工作,如下所示:
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' ] }] } ] })
返回的Object应该如下所示:
{ // ...MyModel attributes , AnotherModel: { displayName: '...', email: '...', }, YetAnotherModel: { // ...YetAnotherModel's attributes , AnotherModel: { id: '...', displayName: '...', email: '...', } } }
tnkciper4#
对于那些仍然在寻找解决这个问题的方法。从https://github.com/sequelize/sequelize/pull/4029开始,如果将raw: true添加到查询中,它将删除主键。
raw: true
Model.findOne({ attributes: [ [Sequelize.fn('SUM', Sequelize.col('field')), 'sum'], ], raw: true })
4条答案
按热度按时间kmpatx3s1#
您可以通过将
exclude
数组传递到attributes
选项中来排除任何属性:kyks70gy2#
对于包含的型号,请使用
attributes: ['prop_name']
记住
include
/exclude
不会影响使用through: { attributes:[]}
的嵌套表更多细节可以在这里找到:https://github.com/sequelize/sequelize/issues/4074#issuecomment-153054311
ny6fqffe3#
我想补充的是,你可以显式地列出你想要的属性,它们在嵌套的内部连接上工作,如下所示:
返回的Object应该如下所示:
tnkciper4#
对于那些仍然在寻找解决这个问题的方法。从https://github.com/sequelize/sequelize/pull/4029开始,如果将
raw: true
添加到查询中,它将删除主键。