我一直在尝试使用多个hasMany对象进行查询,例如:
def product = Product.createCriteria().list {
createAlias("productAttributeValues", "pav")
and {
if (session.filters?.filter_instore) {
and {
eq("pav.attribute", Attribute.findByCode("instore"))
eq("pav.valueDe", session.filters?.filter_instore?.toString())
}
}
if (session.filters?.filter_promo) {
and {
eq("pav.attribute", Attribute.findByCode("promo"))
eq("pav.valueDe", "1")
}
}
}
}
这似乎不起作用,因为我从来没有得到结果集,尽管我有匹配的测试数据。似乎问题是我用相同的对象查询了两次。
一种可能的解决方案是单独查询productAttributeValues,然后与""(" myPavs",pavs)相交 - 但这似乎对我来说效率低下。
有什么想法? 感谢。
答案 0 :(得分:1)
我会重新构建你的查询:
def products = Product.withCriteria{
productAttributeValues{
or{
if (session.filters?.filter_instore) {
and {
eq("attribute", Attribute.findByCode("instore"))
eq("valueDe", session.filters?.filter_instore?.toString())
}
}
if (session.filters?.filter_promo) {
and {
eq("attribute", Attribute.findByCode("promo"))
eq("valueDe", "1")
}
}
}
}
}