我使用EasyGrid插件,必须找到整数字段的值,如'%001%'
initialCriteria {
ilike('id', "%"+params.id+"%")
}
但是ilike并没有与Integer合作。怎么做?
我试着这样做:
initialCriteria {
ilike('id'.toString(), "%"+params.id+"%")
}
initialCriteria {
ilike('str(id)', "%"+params.id+"%")
}
但它不起作用。
答案 0 :(得分:4)
如果id
是数据库中的整数,那么ilike
实际上没有多大意义,并且可能有更好的方法来做你想做的事情(比如添加一个类型字段)或域名对象的东西,并按类型过滤)
但是,你应该可以做这样的事情(未经测试):
initialCriteria {
sqlRestriction "cast( id AS char( 256 ) ) like '%001%'"
}
答案 1 :(得分:0)
你可以这样做:
String paddedId = params.id.toString().padLeft(3,'0')
initialCriteria {
ilike('id', "%$paddedId%")
}
答案 2 :(得分:0)
tim_yates提供的带有sqlRestriction的解决方案适用于easygrid的1.5.0版本。 与1.4.x的主要区别之一是gorm数据源不再使用DetachedCriteria,而是Criteria - 它直接映射到Hibernate的Criteria API。
所以你可以在最后一个版本上试试。 (请记住,升级可能会破坏现有的网格。还有许多其他更改)
另一个小小的观察是'initialCriteria'不适合做那样的事情。 (这没有错,但是有一个'globalFilterClosure'属性用于应用列独立过滤器)
答案 3 :(得分:0)
我混合了@tim_yates和我发布的代码:
String paddedId = params.id.toString().padLeft(3,'0')
def crit = Book.withCriteria {
sqlRestriction "lpad(cast( id AS char( 256 ) ), 3, '0') like '%${paddedId}%'"
}
我已尝试使用h2内存数据库并且它可以正常工作,但我不确定两件事:
lpad
语法一致性YMMV
答案 4 :(得分:0)
如果您在用户搜索任何文字字符 错误(例如 12dfdsf )作为您的可搜索ID时从文本框中搜索,则以下条件无效。它会为您提供例外
initialCriteria {
ilike('id', "%"+params.id+"%")
}
为了更好地使用,您可以使用以下标准
initialCriteria {
sqlRestriction "id like '%${params?.id}%'"
}