用法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,%'//這裏放要傳的參數
}]
}
});
};
}