gpt4 book ai didi

grails - 带有相似值的Grails findAll

转载 作者:行者123 更新时间:2023-12-02 14:15:02 25 4
gpt4 key购买 nike

试图简单地使用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”或“Johnson”,则可以使用。

我对变量或“赞”引用做错了什么?我认为搜索条件中的%符号基本上是*符号?

我已经尝试了2.0.0形式的搜索:
        searchResults = Contact.findAll{
company == params.company.id
firstName == '%' + nameSearch + '%'
lastName == '%' + nameSearch + '%'
}

但这也不起作用。谢谢大家的帮助

最佳答案

试试看:

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

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

您的HQL尝试有一些(也许更多)错误:
  • 您的company条件是将一个对象(c.company)与一个id值(params.company.id)进行比较
  • 您需要正确地对 bool(boolean) 逻辑进行分组,即(company AND (first OR last)),而不是(company AND first OR last)
  • 您应该一直在使用like而不是=,例如firstName like '%something%'

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

    关于grails - 带有相似值的Grails findAll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9456818/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com