if (params.filters) {
def o = JSON.parse(params.filters);
def groupOp = o.groupOp
def fields = o.rules.field
def values = o.rules.data
def op = o.rules.op
println fields
println values
if(groupOp == "AND") {
fields.eachWithIndex {a, i ->
println op[i]
if(op[i].equals("eq")) {
and{ eq(fields[i], values[i])}
}
if(op[i].equals("ne")) {
and{ ne(fields[i], values[i])}
}
if(op[i].equals("ge")) {
def valu = Double.valueOf(values[i]);
and{ ge(fields[i], valu)}
}
}
}
if(groupOp == "OR") {
fields.eachWithIndex {a, i ->
println op[i]
if(op[i].equals("eq")) {
println 'eq';
or{ eq(fields[i], values[i])}
}
if(op[i].equals("ne")) {
println 'ne';
or{ ne(fields[i], values[i])}
}
if(op[i].equals("ge")) {
def valu = Double.valueOf(values[i]);
or{ ge(fields[i], valu)}
}
}
}
}
여기에서 params.filters
은 JSON 텍스트를 따르고 있습니다.GORM의 기준 구축
{
"groupOp":"OR",
"rules":[
{
"field":"foo1",
"op":"le",
"data":"9.5"
},
{
"field":"foo2",
"op":"eq",
"data":"12345-123"
},
{
"field":"foo3",
"op":"cn",
"data":"IDM"
}
]
}
이 데이터는 JQuery 데이터 그리드에서 가져옵니다.
더 좋은 방법이 있나요? 코드에서 나는 단지 3 개의 연산자만을 나열했지만 실제로는 14 개의 연산이 있습니다. 에만 허용 당신은 웹 제출 된 쿼리를 소독해야합니다 그래서 당신은 어쨌든
A.withCriteria {
(groupOp) {
for (???) {
(op[i]) (fields[i], parsedVals[i])
}
}
}
처럼 뭔가 올 수도
A.withCriteria {
'eq' (id, 1)
}
: