【问题标题】:How to do "WHERE" in Sequelize, but EXCLUDE nested Model?如何在 Sequelize 中执行“WHERE”,但排除嵌套模型?
【发布时间】:2018-04-11 12:30:23
【问题描述】:

有两种模型:用户和客户端。

Client.hasMany(User);
User.belongsTo(Client);

接下来,我在做:

User.findAll({
    include: [{
        model: Client,
        where: {
            id: “1”
        }
    }]
});

此代码运行良好,但在最终输出中包含具有所有属性的客户端模型。我怎样才能仍然做“where”语句,但完全排除客户端模型?

【问题讨论】:

  • 明确地说,您仍然想根据客户端进行查询,但您不需要在响应中返回该对象?

标签: node.js sequelize.js


【解决方案1】:

你可以通过两种方式做到这一点

User.findAll({
    attributes : ['User.*'] // might be user.* or users.* . as per your query genetaion
    include: [{
        model: Client,
        where: {
            id: "1"
        }
    }]
});

//OR

{
  attributes: {
    include: [], // define columns that you want to show
    exclude: [] // define columns that you don't want 
  }
}

【讨论】:

    【解决方案2】:

    有点麻烦,不是真的你想要的,但我有类似的情况,我这样解决了。

    new Promise((resolve, reject) => {
      User.findAll({
        include: [{
          model: Client,
          where: {
            id: "1"
          }
        }]
      }).then(users => {
        users.forEach(u => u.client = null);
        resolve(users);
      }).catch(e => {
        reject(e);
      });
    });
    

    因此,您将请求包装在一个承诺中并对查询结果进行评分,删除您不想要的属性(我只是将其取消,但如果需要,您可以获得更具创造性的对象映射),然后返回该对象随你喜欢。

    TLDR;
    你不能(afaik)。如果您的绝对不希望客户响应,您必须这样做。

    【讨论】:

      猜你喜欢
      • 2021-06-05
      • 2018-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多