Grails findAll具有相似的值

时间:2012-02-26 20:23:51

标签: grails findall

尝试使用find all简单地运行域对象的查询,并且它没有按照我的预期行事:

searchResults = Contact.findAll("from Contact as c where c.company=${params.company.id} and c.firstName = '%${nameSearch}%'  or c.lastName = '%${nameSearch}%' ")

我想找到公司中名字或姓氏与输入的搜索类似的所有人(params.search存储在nameSearch变量中)。如果我将第一个或最后一个的值更改为特定名称" Tim"或"约翰逊",它有效。

我对变量做错了什么或"喜欢"参考?我认为%符号基本上是搜索条件中的*符号?

我尝试过2.0.0搜索形式:

        searchResults = Contact.findAll{
            company == params.company.id
            firstName == '%' + nameSearch + '%'
            lastName == '%' + nameSearch + '%'
        }

但那也没有用。谢谢你的帮助

1 个答案:

答案 0 :(得分:7)

尝试一下:

def company = Company.get(params.company.id)
def searchResults = Contact.withCriteria {
    eq('company', company)
    or {
        ilike('firstName', '%' + nameSearch + '%')
        ilike('lastName', '%' + nameSearch + '%')
    }
}

如果您不想检索Company个实例,可以在company { }块中使用idEq()


你的HQL尝试错误的一些事情(可能更多):

  • 您的company条件是将对象(c.company)与ID值(params.company.id)进行比较
  • 您需要正确分组布尔逻辑,即(company AND (first OR last)),而不是(company AND first OR last)
  • 您应该使用like代替=,例如firstName like '%something%'

As a matter of security你真的,真的不应该用内联值构建你的HQL语句。您应该使用命名参数。查看findAll documentation中的一些中间示例。