我正在尝试在Grails中完成一个条件查询,有时必须引用一个无关联的表,因此使用一个分离的查询。根据传入的参数,我需要执行不同的子查询。
我有一个客户域名,这就是我正在创建基准的标准,因为有可用于查询客户字段,名称等的选项。
用户应该可以通过客户订单的状态查询客户,这是我的麻烦开始的地方。客户和订单之间没有任何东西,但有一个可以使用分离查询查询的连接表。
因此,还有一个Order和一个CustomerOrder连接表。
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))
}
}
}