Sequelize 中存在关联记录时如何获取标记

问题描述 投票:0回答:1

我有一个模型 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

javascript postgresql express sequelize.js
1个回答
0
投票

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
  }
})
© www.soinside.com 2019 - 2024. All rights reserved.