gpt4 book ai didi

grails - findBy 多个属性 (findAllWhere)

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

我有一个对象,我必须从中过滤某些属性,其中一些也可能是“空”。我有一个 Filter 对象和一个 Product 对象。

在 Filter 对象中,我有一些反射(reflect) Product 对象的属性,可以填写或留空。这里是类(class)的简短 View 。

Product: String name, Boolean isEmpty, ...., belongsTo [Producer, Distributor]...


Filter: Boolean isEmpty, ... belongsTo [Producer, Distributor]...

使用此过滤器,我可以搜索具有特定属性(空、生产商、分销商)的所有产品。

我有一个导出功能,我可以在其中选择过滤器并根据产品的选择输出信息。

由于所有这些属性都可以为空,但也包含一个值,所以我首先想到构造一个自己的搜索查询(组合字符串等)来构造一个 SQL 字符串,然后使用 Product.findAll(string_query, string_params) .但由于这非常乏味,我现在将其更改为如下内容:

if(filter.producer)
prods = Product.findAllWhere(producer:filter.producer)
if(filter.distributor)
prods = prods.findAll {it.distributor == filter.distributor}
if(filter.isEmpty!=null) //as it could be NULL but also false/true
prods = prods.findAll {it.isEmpty == filter.isEmpty}

但如果我有 10-15 个属性要过滤,这将成为一项相当大的任务。我对 Grails 或 Groovy 不是很有经验,但我想这可以更容易地解决,对吧?

最佳答案

我相信您会发现 Grails Criteria 查询是完成此类任务的一种非常好的方式。参见:

当表示为条件查询时,您的样本可能看起来像这样:

def prods = Product.createCriteria().list {
if(filter.producer) eq("producer", filter.producer)
if(filter.distributor) eq("distributor", filter.distributor)
if(filter.isEmpty != null) eq("isEmpty", filter.isEmpty)
}

关于grails - findBy 多个属性 (findAllWhere),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14861218/

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