Sequelize.js Sequelize查询-返回所有项(如果一项与查询匹配)

Sequelize.js Sequelize查询-返回所有项(如果一项与查询匹配),sequelize.js,Sequelize.js,我有两种型号,配方和配料 基本上我有一个搜索功能,理想情况下,当你搜索一种配料时,它会返回使用该配料的配方 我设法使查询与以下内容一起工作。唯一的问题是,它只返回与查询匹配的成分。我希望它返回配方中的所有成分,如果其中一种成分与查询匹配。我将如何调整以下内容来实现这一点 例如,如果我搜索西红柿,我将获得西红柿食谱,但返回的配料仅包括西红柿,而不包括其余配料 const recipes = await Recipe.findAll({ include: { model:

我有两种型号,配方和配料

基本上我有一个搜索功能,理想情况下,当你搜索一种配料时,它会返回使用该配料的配方

我设法使查询与以下内容一起工作。唯一的问题是,它只返回与查询匹配的成分。我希望它返回配方中的所有成分,如果其中一种成分与查询匹配。我将如何调整以下内容来实现这一点

例如,如果我搜索西红柿,我将获得西红柿食谱,但返回的配料仅包括西红柿,而不包括其余配料

const recipes = await Recipe.findAll({
      include: {
        model: Ingredient,
        where: {
          name: {
            [Op.iLike]: `%${ingredients}%`,
          },
        },
      },
});

提前谢谢

您可以使用不同的别名定义配方与配料之间的两个关联:一个别名用于过滤,另一个别名用于提取所有配料,如下所示:

Recipe.hasMany(Ingredient, { foreignKey: 'recipeId', as: 'Ingredients' })
Recipe.hasMany(Ingredient, { foreignKey: 'recipeId', as: 'FilteringIngredients' })
...
const recipes = await Recipe.findAll({
      include: [{
        model: Ingredient,
        as: 'FilteringIngredients',
        where: {
          name: {
            [Op.iLike]: `%${ingredients}%`,
          },
        },
      }, {
        model: Ingredient,
        as: 'Ingredients',
        separate: true
      }],
});