首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在'include'/eager-loading之后确定列的目标

在'include'/eager-loading之后确定列的目标
EN

Stack Overflow用户
提问于 2019-03-26 04:08:15
回答 1查看 23关注 0票数 0

我正在尝试编写一个序列化函数,它看起来像下面的SQL代码:

代码语言:javascript
复制
SELECT * from events INNER JOIN corrections on events.correctionId
= correction.id WHERE events.failureId =  1234 OR 
corrections.failureId = 1234

基本上,我有一个外键为failureId和correctionId的表(events)。校正表还具有失败表的外键。我需要事件中failureId等于某个特定数字的所有行,以及纠正表中failureId等于该数字的所有行。

我遇到问题的部分是引用由内连接产生的corrections.failureId列。我尝试了一大堆变体,但都不起作用。这是我到目前为止所知道的:

代码语言:javascript
复制
Event.findAll({
      include: [correction],
      where: { [sequelize.Op.or]: [{ failID }, {????}] }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-26 04:36:31

1)您可以使用顶级where将查询从ON where (http://docs.sequelizejs.com/manual/models-usage.html#top-level-where-with-eagerly-loaded-models)移动到主where查询

代码语言:javascript
复制
Event.findAll({
      include: [correction],
      where: { [sequelize.Op.or]: [{ failureId }, { '$correction.failureId$': failureId }] }] }
})

2)默认情况下sequelize将使用LEFT OUTER JOIN。要更改此行为,您需要传递required以包含以下内容:

代码语言:javascript
复制
Event.findAll({
      include: [{ model: correction, required: true }],
      where: { [sequelize.Op.or]: [{ failureId }, { '$correction.failureId$': failureId }] }] }
})

或者只将where语句添加到包含的模型中,如下所示:

代码语言:javascript
复制
Event.findAll({
      include: [{ model: correction, where: {...} }],
      where: { [sequelize.Op.or]: [{ failureId }, { '$correction.failureId$': failureId }] }] }
})

因此,在您的示例中,您需要:

代码语言:javascript
复制
Event.findAll({
      include: [{ model: correction, required: true }],
      where: { [sequelize.Op.or]: [{ failureId }, { '$correction.failureId$': failureId }] }] }
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55345651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档