如何将单个 SQL OR 运算符应用于续集中的表及其关联表?

我想查找其中包含特定子字符串的产品(搜索产品),即搜索字符串匹配或或{在其他关联表( OR) 中} 或其他关联(hasMany)表( ),即,如果所有SKU的描述中的任何位置}product.nameproduct.descriptioncategory.namecategory.descriptionsku.description


我有一个具有以下结构的表格


products具有字段

的字段

与具有字段的字段id | name | description | categoryIdcategoriesid | name | descriptionskuid | productId | description


有关系


db.product.belongsTo(db.category);

db.category.hasMany(db.product);


db.sku.belongsTo(db.product);

db.product.hasMany(db.sku);

最终,我想要搜索字符串与产品的任何位置匹配的产品。


db.product.findAll({

   include: [

      {

         // hasOne relation

         model: db.category,

      },

      {

         // hasMany relation

         model: db.sku,

      },

   ],

   where: {

      [Op.or]: [

         {

            name: {

               [Op.like]: `%${search}%`

            }

         },

         {

            description: {

               [Op.like]: `%${search}%`

            }

         },

         // this doesn't work need some way to achieve something like this

         // {

         //    category:{

         //       name: {

         //          [Op.like]: `%${search}%`

         //       }

         //       description: {

         //          [Op.like]: `%${search}%`

         //       }

         //    }

         // }


      ]

   }

})

我可以在 部分内应用条件,但这不会像整体或那样像我需要的搜索一样工作。whereincludecategory


这不会给出预期的结果


   include: [

      {

         model: db.category,

         where : {

            name: {

                [Op.like]: `%${search}%`

            }

            description: {

                [Op.like]: `%${search}%`

            }

         }

      }

   ],


慕妹3242003
浏览 69回答 1
1回答

慕姐8265434

使用不开箱即用的联接表列的子句可以包装在 $中。为了获取涉及嵌套列的顶级 WHERE 子句,Sequelize 提供了一种引用嵌套列的方法:“$nested.column$”语法。例如,它可用于将 where 条件从包含的模型从 ON 条件移动到顶级 WHERE 子句。User.findAll({  where: {    '$Instruments.size$': { [Op.ne]: 'small' }  },  include: [{    model: Tool,    as: 'Instruments'  }]});在 SQL 中生成:SELECT  `user`.`id`,  `user`.`name`,  `Instruments`.`id` AS `Instruments.id`,  `Instruments`.`name` AS `Instruments.name`,  `Instruments`.`size` AS `Instruments.size`,  `Instruments`.`userId` AS `Instruments.userId`FROM `users` AS `user`LEFT OUTER JOIN `tools` AS `Instruments` ON  `user`.`id` = `Instruments`.`userId`WHERE `Instruments`.`size` != 'small';有关文档,您可以在此处阅读:https://sequelize.org/master/manual/eager-loading.html
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript