我有一个模型 A,与模型 B 具有 1:N 关联。我想获取 A 中的所有记录,如果 B 中至少存在一条关联记录,则为 true,否则为 false。
协会:
ModelA.hasMany(ModelB)
ModelB.belongsTo(ModelA)
查询:
const results = await ModelA.findAll({
include: { model: ModelB, required: false }
})
这样我就可以从 B 中获取匹配的记录(如果它们存在)(通过外连接),但我对 B 中的记录并不真正感兴趣,我只想知道它们是否存在。有没有办法生成所需的
SELECT
查询以根据连接结果直接获取 true/false?
我想要的查询是:
SELECT a.*, CASE WHEN b.id IS NOT NULL THEN true ELSE false END
FROM modelA a LEFT OUTER JOIN modelB b on b.model_a_id = a.id
Sequelize 尚不支持
CASE WHEN
,因此您需要使用 literal
。
const results = await ModelA.findAll({
attributes: {
include: [
[Sequelize.literal('CASE WHEN "b"."id" IS NOT NULL THEN true ELSE false END'), 'b_exists']
]
},
include: {
model: ModelB,
attributes: [], // add this to remove ModelB data in response
required: false
}
})