如何在带有 "if" 语句的 Grails 中使用 findAll 在搜索之前验证字段是否为空
How to use findAll in Grails with "if" statement to verify if the field is null before searching
我需要在 Grails 中创建一个 findAll
条件,但我有 4 个字段要搜索。如果特定变量不为空,我只需要按这些字段进行搜索。
例如,如果所有变量都不为空,我将搜索所有字段,如下所示:
list = MyObject.findAll {
'in'("job", jobList)
'in'("businessUnit", businessUnitList)
'in'("company", companyList)
eq("regularTime", params.regularTime)
}
我想做的是这样的:
regularTimeList = RegularTime.findAll {
if(params.job != null) 'in'("job", jobList)
if(params.businessUnit != null) 'in'("businessUnit", businessUnitList)
if(params.company != null) 'in'("company", companyList)
if(params.regularTime != null) eq("regularTime", params.domainClassSearchFilters.regularTime)
}
它不起作用,所以我想知道是否有办法做到这一点,因为现在我必须创建很多 ifs 来验证它们......我需要一个 if 到每个场景......喜欢:
如果job
不为null且company
不为null,一个findAll。如果 company
不为空且 regularTime 不为空,则另一个 findAll
.
你可以这样做:
regularTimeList = RegularTime.findAll {
if (params.job != null) params.job in jobList
if (params.businessUnit != null) params.businessUnit in businessUnitList
if (params.company != null) params.company in companyList
if (params.regularTime != null) regularTime == params.domainClass
}
我不知道发生了什么,但是上面的方法对我不起作用...
我使用标准解决了它。
list= MyObject.createCriteria().list {
if(params.job != null && "" != params.domainClassSearchFilters.job )
'in'("job", jobList)
if(params.businessUnit != null && "" != params.businessUnit)
'in'("businessUnit", businessUnitList)
if(params.company != null && "" != params.company)
'in'("company", companyList)
if(params.regularTime != null && "" != params.regularTime && params.regularTime.isDouble())
eq("regularTime", Double.parseDouble(params.regularTime))
}
我需要在 Grails 中创建一个 findAll
条件,但我有 4 个字段要搜索。如果特定变量不为空,我只需要按这些字段进行搜索。
例如,如果所有变量都不为空,我将搜索所有字段,如下所示:
list = MyObject.findAll {
'in'("job", jobList)
'in'("businessUnit", businessUnitList)
'in'("company", companyList)
eq("regularTime", params.regularTime)
}
我想做的是这样的:
regularTimeList = RegularTime.findAll {
if(params.job != null) 'in'("job", jobList)
if(params.businessUnit != null) 'in'("businessUnit", businessUnitList)
if(params.company != null) 'in'("company", companyList)
if(params.regularTime != null) eq("regularTime", params.domainClassSearchFilters.regularTime)
}
它不起作用,所以我想知道是否有办法做到这一点,因为现在我必须创建很多 ifs 来验证它们......我需要一个 if 到每个场景......喜欢:
如果job
不为null且company
不为null,一个findAll。如果 company
不为空且 regularTime 不为空,则另一个 findAll
.
你可以这样做:
regularTimeList = RegularTime.findAll {
if (params.job != null) params.job in jobList
if (params.businessUnit != null) params.businessUnit in businessUnitList
if (params.company != null) params.company in companyList
if (params.regularTime != null) regularTime == params.domainClass
}
我不知道发生了什么,但是上面的方法对我不起作用... 我使用标准解决了它。
list= MyObject.createCriteria().list {
if(params.job != null && "" != params.domainClassSearchFilters.job )
'in'("job", jobList)
if(params.businessUnit != null && "" != params.businessUnit)
'in'("businessUnit", businessUnitList)
if(params.company != null && "" != params.company)
'in'("company", companyList)
if(params.regularTime != null && "" != params.regularTime && params.regularTime.isDouble())
eq("regularTime", Double.parseDouble(params.regularTime))
}