通过连接几个表获取不同的数据Sequelize ORM

时间:2018-03-10 07:17:14

标签: node.js sequelize.js

这是关于sequelize ORM和我正在开发用于餐饮应用的节点js API。 MealPrice表(FK:mealId)链接到餐桌(PK:Id),餐桌(FK:RestaurantId)链接到餐厅表(PK:Id)。没有直接加入"餐厅"表格来自" mealprice"表。 我需要的是,如果我通过" IsActive = true"吃饭的状态价格表应该得到餐厅(清单)列表。老实说,我对sequelize ORM没有多少经验。这就是我现在尝试的东西,它会返回mealPrice和膳食数据。

        global.mealpricing.belongsTo(global.meal, { targetKey: 'id', foreignKey: 'mealId' });
        global.meal.belongsTo(global.resturant, { targetKey: 'id', foreignKey: 'resturantId' });

        global.mealpricing.findAll({
            include: [{
                model: global.meal,
            }],

            where: { isActive: true }
        }).then(meals => {
            res.send(meals);
        });

我关心的是如何获得仅限餐厅的JSON清单?请给我指点。

1 个答案:

答案 0 :(得分:2)

  • 使用 mealpricing 的内部联接 meal 表获取所有餐厅ID
  • 通过这些ID查找所有餐馆,在'id'栏

    上使用不同的运算符
    global.mealpricing.findAll({ 
     where: {isActive: true},
     include: {
       model: global.meal,
       attributes: ['resturantId']
     }
    })
    .then(mealPricingDocs => {
      const restaurantIds = mealPricingDocs.map(i => i.meal.restaurantId);
      return global.restaurant.findAll({
       where: { id: { $in: restaurantIds } },
       distinct: 'id'
      });
    })
    .then(restaurants => res.send(restaurants));