Как создать этот критерий / отдельный запрос на основе критериев в Grails
Я пытаюсь выполнить запрос критерия в Grails, который иногда должен ссылаться на неассоциированную таблицу, поэтому использую отдельный запрос. В зависимости от переданного параметра мне нужно выполнить другой подзапрос.
У меня есть домен Customer, на котором я создаю критерии, основываясь на том, что есть опции для запроса по полям клиента, имени и т. Д.
Для пользователя должна быть возможность делать запросы к клиенту по статусу заказов клиентов, вот тут и начинаются мои проблемы. Между клиентами и заказами нет hasMany, но есть таблица соединений, к которой можно обратиться с помощью отдельного запроса.
Таким образом, есть также таблица Order и OrderOrder.
Таблица Order имеет поле состояния, которое может содержать Enum с возможными значениями null, OPEN или CLOSED.
Я хочу дать пользователю возможность (через меню выбора) выбрать вариант статуса заказа: "Нет заказов", "Открытые заказы", "Закрытые заказы" и "Открытые или закрытые заказы".
перевод этого на отдельный критерий оказывается сложным, если кто-то может помочь, это было бы здорово.
для начала у меня есть... но это не завершено, и я не думаю, что я иду в правильном направлении с блоком if.
def results = Customer.createCriteria().list {
/* other restrictions omitted */
// now the order status test
if (params.orderStatus) {
if (params.orderStatus == 'NO_ORDERS') {
} else if (params.orderStatus == 'CLOSED_ORDERS') {
} else if (params.orderStatus == 'OPEN_ORDERS') {
} else if (params.orderStatus == 'OPENORCLOSED_ORDERS') {
def sub = DetachedCriteria.forClass(CustomerOrder.class, 'co').with {
and {
order {
eq('status', params.orderStatus)
}
client {
add(Restrictions.eqProperty('this.id', 'id'))
}
}
//setProjection(Property.forName('id'))
}
add(Subqueries.propertyIn('id', sub))
}
}
}