嵌套的findall()和“ case”等价于include语句

时间:2019-06-21 06:02:12

标签: node.js postgresql express sequelize.js

(一周以来)我对API还是很陌生,并且一直面临挑战。

我在Postgres中有表格,并为每个表格创建了模型。在某些情况下,存在一个到另一个的链接。如果该链接不存在,那么我要使用默认值,该默认值保存在另一个表中。

示例:

Table - items
- id (int)
- name (text)
- startDateTime (date)
- endDateTime (date)

Table - itemTypes
- id (int)
- name (text)
- isDefault (boolean)

Table - itemTypesLinkItems
- id (int)
- itemsId (int)
- itemTypesId (int)
- fromDateTime (date)
- toDateTime (date)

在任何给定日期,将显示一个项目列表。其中一些可能会通过itemTypesLinkItems表链接到itemTypes,因此我可以显示itemTypes.Name。对于其余部分,我想显示isType = true的itemTypes.Name值。

我搜索了所有内容,并尝试使用SQL视图进行操作,但是没有运气。我希望可以在API的JavaScript中完成此操作。

router.get(‘/:date’, (req, res) =>
db.items.findAll()({
  include: [
    {
    model: db.itemtypelinkitem,
    required: false,
    include: [
      {
      model: db.itemtypes 
      }
    ]
    where: {
      startDateTime: {[Op.lte]: req.params.date},
      endDateTime: {[Op.gte]: req.params.date}
    }
    }
  ]

我只是不知道从这里去哪里。如果我排除“必需”项,则仅返回带有链接的那些项。如果包含它,则它们全部显示,并且如果有链接,它将返回详细信息,否则仅返回[]。如果它返回[],我想将其替换为默认itemTypes中的值。

1 个答案:

答案 0 :(得分:0)

希望您能很好地理解您的问题。

您(商品,itemTypes)之间建立了多对多关系,并希望获得默认设置 获取所有项目时的itemType。 所以我认为这个问题与Sequlize无关。 在将新记录插入“项目”表时,您必须插入默认的“ itemType”。