Grails - 如何在查询之前替换属性?

时间:2015-06-23 18:09:16

标签: grails gorm

我有以下内容:

 myQuery { Map paramsMap, List<MyObject> objectList = null ->
            and {
                if (paramsMap.firstName) {
                    ilike('firstName', paramsMap.firstName + "%")
                }
                if (paramsMap.phone) {
                    ilike('phone', paramsMap.phone + "%")
                }
            }
 }

工作正常。问题是手机可以存储为123-123-1234或9876543210。

当我们到达搜索屏幕时,如果用户查找1231231234,他将得不到任何结果,因为该人用破折号保存了电话号码。同样,如果用户试图将手机设置为987-654-3210,他将找不到任何内容,因为用户保存没有虚线。

无论如何都要用

这样的搜索进行搜索
ilike(phone.replace("-", ""), paramsMap.phone.phone.replace("-", "") + "%")

通过这种方式,它可以正常工作。

有人知道在grails查询之前替换dash的方法吗?

1 个答案:

答案 0 :(得分:1)

那么,

我在这里找到了这个解决方案:

 if (paramsMap.phone) {
                    String phoneNumber = paramsMap.phone.replace("-", "")
                    sqlRestriction("replace(phone, '-', '') like '%$phoneNumber%'")
                }

而不是

 if (paramsMap.phone) {
                    ilike('phone', paramsMap.phone + "%")
                }

这样我就可以随时获得结果。