从续订查询

时间:2018-03-04 12:16:34

标签: mysql node.js sequelize.js

我有一个sequelize查询来自多个表内连接在一起。我需要在嵌套的include模型上对它们进行分组,但是sequelize查询每次都会抛出主键,即使我将属性提到:attributes:[]

但是attributes:[]适用于嵌套的include模型。

3 个答案:

答案 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