2015-07-13 1 views
0

Мне нужно создать критерии findAll в Grails, но у меня есть 4 поля для поиска. Мне просто нужно искать по этим полям, если конкретная переменная не равна нулю.Как использовать findAll в Grails с инструкцией «if», чтобы проверить, было ли поле нулевым до поиска

Например, если все переменные не нулевой, я буду искать по всем полям, как следующее:

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, чтобы проверить их ... Мне нужно, если каждый сценарий ... Как:

Если job не является нулевым и company не является нулевым, один findAll. Если company не имеет значения null и regularTime не равно null, другой findAll.

ответ

0

Вы можете сделать что-то вроде этого:

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 
} 
0

Я не знаю, что случилось, но, как прежде не работал для меня ... я решил, что с использованием критериев.

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)) 
      } 
Смежные вопросы