有两种模型:用户和客户端。
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(。如果您绝对不希望客户端出现在响应中,则必须执行此类操作。