sequelize的where条件接受动态参数传入

用法1

问题场景

传入参数:数组array,数组元素不定

目标

要实现逻辑:遍历数组,根据inverted的值对同一个表字段增加一个like查询

要生成的sql语句(where条件部分):

`jz_task_info`.`task_tag` LIKE '%,1,%' AND `jz_task_info`.`task_tag` LIKE '%,2,%' 

 

解决方法

直接上代码:

const sequelize = require('sequelize');
const Op = sequelize.Op;

class xxController extends Controller {
    // 查询任务列表
    async getTaskList() {
      //要拼装的动态语句数组
      let dynamicParams = [];
      //前台传入的数组,这里模拟数据
      //let tagList = JSON.parse(ctx.request.body.tagList);
      let tagList = [{id:1,
            "inverted":false,
            text:"aaa",
            type:"primary"
             },
            {id:2,
            inverted:false,
            text:"bbb",
            type:"primary"
             },
            {id:3,
            inverted:true,
            text:"ccc",
            type:"primary"
             }]
      
      if(tagList&&tagList.length>0){
                      tagList.forEach(element => {
                          if(element.inverted === false){
                              dynamicParams.push({
                                  task_tag:  {[Op.like]:`%${element.id}%`}
                              })
                          }
                      });
                  }
      await app.model.JzTaskInfo.findAll({
                      where:{
                        [Op.and]:dynamicParams
                      }
                  });
          };
}

用法2

问题场景

传入参数:数组array,数组个数固定

目标

要实现逻辑:根据inverted的值对同一个表字段增加一个like查询

要生成的sql语句(where条件部分):

`jz_task_info`.`task_tag` LIKE '%,1,%' AND `jz_task_info`.`task_tag` LIKE '%,2,%' 

 

解决方法

直接上代码:

const sequelize = require('sequelize');
const Op = sequelize.Op;

class xxController extends Controller {
    // 查询任务列表
    async getTaskList() {
      //要拼装的动态语句数组
      let dynamicParams = [];
      //前台传入的数组,这里模拟数据
      //let tagList = JSON.parse(ctx.request.body.tagList);
      let tagList = [{id:1,
            "inverted":false,
            text:"aaa",
            type:"primary"
             },
            {id:2,
            inverted:false,
            text:"bbb",
            type:"primary"
             }, 
            {id:3,
            inverted:true,
            text:"ccc",
            type:"primary"
             }];
      if(tagList&&tagList.length>0){
                      tagList.forEach(element => {
                          if(element.inverted === false){
                              dynamicParams.push({
                                  task_tag:  {[Op.like]:`%${element.id}%`}
                              })
                          }
                      });
                  }
      await app.model.JzTaskInfo.findAll({
                      where:{

                               [Op.and]:[{
                                  task_tag:{
                                      [Op.like]: '%,1,%' //这里放要传的参数
                                     }
                              },{
                                  task_tag:{
                                      [Op.like]: '%,2,%'//这里放要传的参数
                                     }]
                      }
                  });
          };
}

like操作符注意细节

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章