如何在续集中"WHERE",但排除嵌套模型?



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

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

接下来,我正在做:

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

此代码工作正常,但在最终输出中包含具有所有属性的客户端模型。我怎么还能做"where"语句,但完全排除客户端模型?

你可以用

2 种方式做到这一点

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 
  }
}

它有点卡顿,不是你想要的但我也有类似的情况,我像这样解决了它。

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);
  });
});

因此,您将请求包装在 promise 中并对查询结果进行评分,删除您不想要的属性(我只是将其清空,但如果需要,您可以获得更多创造性的映射对象(,然后根据需要返回对象。

TLDR;
你不能(afaik(。如果您绝对不希望客户端出现在响应中,则必须执行此类操作。

最新更新