Grails由多个列查找

Grails由多个列查找,grails,gorm,Grails,Gorm,我有一个简单的标记类,只有两个字段,name和value class Tag { String name String value } 我试图呈现一个XML,在这里我想通过findBy…Ilike()搜索这两个参数的一部分 但这并没有给我任何结果。如果我只使用一个参数,它将按预期工作: def getXml = { render Tag.findAllByNameIlike("%${params.name}%") as XML } 我的下一个问题可能是过滤结果,并将其

我有一个简单的标记类,只有两个字段,name和value

class Tag {
    String name
    String value
}
我试图呈现一个XML,在这里我想通过findBy…Ilike()搜索这两个参数的一部分

但这并没有给我任何结果。如果我只使用一个参数,它将按预期工作:

def getXml = {
    render Tag.findAllByNameIlike("%${params.name}%") as XML
}
我的下一个问题可能是过滤结果,并将其他“类似”标记添加到返回列表中,那么有没有一种方法可以通过以下方式解决上述问题:

def getXml = {
    list = Tag.findAllByNameIlike("%${params.name}%")
    list.add(Some other stuff)
    list.sortBy(Some thing, maby name length)
}

对于多字段
ilike
查询,您可以使用:

这将返回名称与提供的名称匹配且值与提供的值匹配的
标记
域列表


可能会让你做大部分你需要的过滤,但是你也可以考虑使用一些Groovy。

< p>对于你的多字段<代码> ILIKE < /Cord>查询,你可以使用:

这将返回名称与提供的名称匹配且值与提供的值匹配的
标记
域列表


可能会让你做大部分你需要的过滤,但是你也可以考虑使用一些Groovy。

你必须把限制(InLead,NotNull等)放在动态取景器的每个字段上。如果不这样做,它将假定相等。以下是您正在寻找的内容:


Tag.findallbynameilikeandvaluelike(“%${params.name}%”,“%${params.value}%”)

您必须对动态查找器的每个字段设置限制(InList、NotNull等)。如果不这样做,它将假定相等。以下是您正在寻找的内容:


Tag.findallbynameilikeandvaluelike(“%${params.name}%”,“%${params.value}%”)

这两个答案都很好。我两个都试过了,但我得说我最喜欢WitchCritia。看起来很灵活

    def result = Tag.withCriteria {
        if(params.name != null)
            ilike('name', "%${params.name}%")
        if(params.value != null)
            ilike('value', "%${params.value}%")
    }
    result.add(new Tag('name': "something"))
    render result as XML

两个答案都很好。我两个都试过了,但我得说我最喜欢WitchCritia。看起来很灵活

    def result = Tag.withCriteria {
        if(params.name != null)
            ilike('name', "%${params.name}%")
        if(params.value != null)
            ilike('value', "%${params.value}%")
    }
    result.add(new Tag('name': "something"))
    render result as XML

您是否尝试使用withCriteria方法或标准来处理您的请求?您是否尝试使用withCriteria方法或标准来处理您的请求?谢谢您的回答。这似乎是一种简单而灵活的方式。对不起,我也是stackoverflow的新手。看来我不得不把我的回复作为一个新的答案发布:)谢谢你的回答。这似乎是一种简单而灵活的方式。对不起,我也是stackoverflow的新手。看来我不得不把我的回复作为一个新的答案发布:)
    def result = Tag.withCriteria {
        if(params.name != null)
            ilike('name', "%${params.name}%")
        if(params.value != null)
            ilike('value', "%${params.value}%")
    }
    result.add(new Tag('name': "something"))
    render result as XML