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操作符注意細節

 

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